Извлечь переменную строку между заданными строками в oracle sql - PullRequest
0 голосов
/ 13 января 2020

Не могли бы вы помочь мне извлечь статус каждой последовательности снизу, в Oracle SQL? Мне нужно получить «закончено» или «начато», или любой другой новый статус, который может иметь предыдущая последовательность в этой конкатенации, то есть результат предыдущего запроса.

Мне нужно выполнить поиск по «account» и получить « завершено »в первом случае и пусто во втором случае ИЛИ произведите поиск по« книге »и получите« начало »в первом случае и« завершено »для второго случая.

STATUS
==========================================================================
sequence_account;finished;sequence_book;started;sequence_content;finished;
sequence_book;finished;

1 Ответ

3 голосов
/ 13 января 2020

Если вы используете шаблон ;sequence_<term>;<value>;, просто найдите подстроки, которые соответствуют:

Oracle Настройка :

CREATE TABLE your_query ( status ) AS
SELECT 'sequence_account;finished;sequence_book;started;sequence_content;finished;' FROM DUAL UNION ALL
SELECT 'sequence_book;finished;' FROM DUAL

Запрос :

SELECT REGEXP_SUBSTR( status, '(^|;)sequence_book;(.*?);', 1, 1, NULL, 2 ) AS book,
       REGEXP_SUBSTR( status, '(^|;)sequence_account;(.*?);', 1, 1, NULL, 2 ) AS account
FROM   your_query

Вывод :

BOOK     | ACCOUNT 
:------- | :-------
started  | finished
finished | <em>null</em>    

db <> Fiddle здесь

Однако вы утверждаете, что ввод является запросом, который вы генерируете с использованием конкатенации. Зачем беспокоиться о конкатенации и вместо этого просто отфильтровывать нескатенированные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...