Регулярное выражение Oracle для отображения строки после специального символа

Я использую регулярное выражение, чтобы получить всю подстроку после появления специального символа «:».

Данная строка-

Причина создания ящика: Заказ выполнен мной (100005 - Формат ошибки: значение ABC000001606 EmpId недействительно)

Ожидаемый результат-

Заказ выполнен мной (100005 - Формат ошибки: значение ABC000001606 EmpId недействительно)

Я пробую это, но не работаю так, как требуется -

SELECT REGEXP_SUBSTR('Причина создания ящика: Заказ, выполненный мной (100005 - Формат ошибки: значение ABC000001606 EmpId недопустимо)', ':[^ ])') "REGEXPR_SUBSTR" FROM DUAL;

Не могли бы вы помочь?


person Praveen Verma    schedule 02.02.2018    source источник


Ответы (1)


Вот два способа сделать это.

Этот использует REGEXP_SUBSTR, как вы и просили.

with c as (select 'Reason for creating the box: Order done by me (100005 - Error Format: Value ABC000001606 of EmpId is not valid)' str from dual)
SELECT substr(REGEXP_SUBSTR(c.str, ':[^)]+'),2) "REGEXPR_SUBSTR" FROM c;

Здесь используется substr+instr+length, что дает гораздо лучшую производительность, если у вас большой набор данных.

with c as (select 'Reason for creating the box: Order done by me (100005 - Error Format: Value ABC000001606 of EmpId is not valid)' str from dual)
select substr(c.str, instr(c.str, ':')+1, length(c.str)-1)
from c;

Оба они имеют предложение WITH, чтобы сделать пример запроса более читаемым.

person kfinity    schedule 02.02.2018
comment
Kfinity, большое спасибо - person Praveen Verma; 03.02.2018