#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;