База данных ORACLE - текст подстроки из поля без постоянной конечной точки - PullRequest
0 голосов
/ 03 июля 2019

Реально ли получить фрагмент текста в поле, если я не знаю, где это конец? У меня есть текст с фрагментом вроде «type work: blablabla», и мне нужно его получить. Начальная точка фрагмента - 'тип работы:'

Но его длина не постоянна, и после этого фрагмента может быть другой другой текст - не такой как константа; или, или что-то еще, что может дать мне конечную точку для моего фрагмента.

Примеры:

тип работы: блаблабла

начало: 01-01-2019

нужно получить

тип работы: блаблабла

OR

тип работы: блаблабла

blablablabla

sendornot: да

нужно получить

тип работы: блаблабла

blablablabla

1 Ответ

1 голос
/ 03 июля 2019

Я не уверен на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...