Я ищу, чтобы извлечь подстроку из заданного набора строк с помощью REGEXP_SUBSTR - PullRequest
1 голос
/ 13 марта 2020

Это предоставленная строка

MB/123456789/Load ABC,801774/123456789

Здесь я должен извлечь строку после запятой и перед строкой sh. т.е. 801774

Пока я использовал этот запрос.

select TRAN_PARTICULAR,regexp_substr(regexp_substr(TRAN_PARTICULAR,'[^,]+',1,2),'[^/]+') from VW_TRANSACTION_SEARCH

Это работает нормально, но есть ли альтернатива для оптимизации этого запроса.

1 Ответ

1 голос
/ 13 марта 2020

Вы можете использовать

regexp_substr('MB/123456789/Load ABC,801774/123456789',',([^,/]+)/',1, 1, NULL,1)

См. онлайн Oracle демо и regex demo .

Здесь ,([^,/]+)/ соответствует ,, затем захватывает в группу 1 любой один или несколько символов, отличных от , и /, а затем соответствует /. Последний аргумент 1 указывает REGEXP_SUBSTR вернуть значение в группе 1.

Если вы уверены, что там есть только цифры, используйте ',(\d+)/' или ',([0-9]+)/'.

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