Oracle SQL: получение текста между двумя предложениями

#oracle #substring

#Oracle #подстрока

Вопрос:

Я пытаюсь извлечь набор строк из строки, которая хранится в столбце таблицы с именем ‘MyColumn’, одна строка которого выглядит следующим образом-

 Type:MOBILE
Service:GSM
Pd to LOOK:
NOKIA/HMD;
APPLE;
MI;

Pd to SEE (swap):
SAMSUNG;
VIVO;

Pd to SEE (extra):
MOKA;

Contact me: 123456
 

Код, который я пробовал для получения одного столбца, —

 SELECT regexp_substr(myColumn, '"Products to be CEASED:"([^"Products to be PROVIDED (swap):"] )}', 1,1,NULL,1) AS output FROM mytable
 

Мне нужен запрос, который возвращал бы текст между предложениями —

‘Pd для ПРОСМОТРА:’ и ‘Pd для ПРОСМОТРА (обмена):’

‘Pd, чтобы УВИДЕТЬ (поменять местами):’ и ‘Pd, чтобы УВИДЕТЬ (дополнительно):’

«Pd для ПРОСМОТРА (дополнительно):» и «Свяжитесь со мной: 123456»

Например —

 Pd to LOOK:            Pd to SEE (swap):  Pd to SEE (extra):
NOKIA/HMD; APPLE; MI;  SAMSUNG;VIVO;      MOKA;
 

Ответ №1:

Прямым решением является использование функции substr в сочетании с функцией instr. Или DBMS_LOB.instr и substr, если типом данных столбца является LOB.

документация для dbms_lob.instr

например:

 select 
     substr(
       mycolumn,
       instr(mycolumn,'Pd to LOOK:'), --starting position
       instr(mycolumn,'Pd to SEE (swap):') - instr(mycolumn,'Pd to LOOK:'), --amount to get
       ) as "Pd to LOOK:"
     --, other expressions/columns
from 
     my_table;