Я не уверен на 100%, но вам может понадобиться следующий запрос:
-- Sample data:
WITH dat(text) AS (SELECT 'type work: blablabla
start: 01-01-2019' FROM dual UNION ALL
SELECT 'type work: blablabla
blablablabla
sendornot:yes' FROM dual)
-- Query:
SELECT REGEXP_REPLACE(
-- Make sure text starts with 'type work:':
CASE WHEN INSTR(text, 'type work:') > 0 THEN SUBSTR(text, INSTR(text, 'type work:')) END
, '(type work:[^:]*)'||CHR(10)||'[^:'||CHR(10)||']*:.*$','\1'
,1,1,'n') FROM dat
Этот запрос ищет первый: после type work
и торгует всю строку до этого как ключ, а затем возвращает текст от type work
до этого ключа.
Если у вас есть список ключей, вы можете проверить их вместо [^:'||CHR(10)||']
:
SELECT REGEXP_REPLACE(
CASE WHEN INSTR(text, 'type work:') > 0 THEN SUBSTR(text, INSTR(text, 'type work:')) END
, '(type work:[^:]*)'||CHR(10)||'(start|sendornot):.*$','\1'
,1,1,'n') FROM dat