Oracle получает все совпадающие вхождения из столбца

У меня есть таблица, в которой есть 2 столбца: ID и JOB_Description (текст). Я хотел бы написать оракул SQL для извлечения всех подстрок в столбце «Описание», которые соответствуют обычному шаблону.

Тем не менее, я научился извлекать совпадающие подстроки из строки с приведенным ниже SQL, но я понятия не имею, как применить приведенный ниже SQL ко всем данным за один раз в вышеупомянутой таблице (столбец: JOB_Description).

SQL для получения всех совпадающих вхождений из строки:

 SELECT REGEXP_SUBSTR(JOB_Description, '(ABC|DE)([[:digit:]]){5}', 1, LEVEL) AS substr
   FROM (
         select 'Please help to repair ABC12345, DE22222' as JOB_Description 
          from DUAL)
  CONNECT BY LEVEL <= REGEXP_COUNT(JOB_Description, '(ABC|DE)([[:digit:]]){5}');

person MemoryLeak    schedule 24.08.2018    source источник
comment
просто замените строку во внутреннем запросе именем столбца.   -  person Vamsi Prabhala    schedule 24.08.2018
comment
@VamsiPrabhala в данном случае не годится из-за CONNECT BY   -  person Kamil Gosciminski    schedule 24.08.2018
comment
У вас есть дополнительный столбец, который уникален? Или описание работы уникально?   -  person Kamil Gosciminski    schedule 24.08.2018
comment
ID уникален, спасибо   -  person MemoryLeak    schedule 24.08.2018


Ответы (1)


вы можете попробовать этот запрос.

 with test as(
  select 'ABC12345, DE22222' as JOB_Description from DUAL union
  select 'Please help to repair ABC12345, DE22222' as JOB_Description from DUAL 
)
SELECT REGEXP_SUBSTR(JOB_Description, '(ABC|DE)([[:digit:]]){5}', 1, LEVEL) AS substr
FROM test
CONNECT BY LEVEL <= REGEXP_COUNT(JOB_Description, '(ABC|DE)([[:digit:]]){5}')
  AND PRIOR JOB_Description = JOB_Description
  AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL

Результат:

ABC12345
DE22222
ABC12345
DE22222

Хорошее объяснение последних двух строк можно найти здесь

person hotfix    schedule 24.08.2018
comment
JOB_Description = JOB_Description? - person MemoryLeak; 24.08.2018
comment
@MemoryLeak Я добавил ссылку с уже подробным ответом - person hotfix; 24.08.2018