Как вывести шаблон, не включая его начало? - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь извлечь два символа из CLOB в Orcale. Например, столбец CLOB выглядит следующим образом:

"rateArea":"KCMO","state":"MO","addressComponent":null,"msag":null

Я написал:

 SELECT
 REGEXP_SUBSTR( ORD_DETAILS,  'state":"+\w\w' ) state
 from order_log

Это дает мне вывод - state":"MO

Я просто хочу MO в качестве вывода.

Не могли бы вы предложить код регулярного выражения для желаемого результата?

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Использовать группу захвата.REGEXP_SUBSTR() принимает необязательный параметр, чтобы указать, какую группу извлекать вместо всего совпадения.

SELECT REGEXP_SUBSTR( ORD_DETAILS,  'state":"+(\w\w)', 1, 1, NULL, 1) state
FROM order_log
0 голосов
/ 31 мая 2019

Ваши данные очень похожи на JSON, и если ваша версия базы данных Oracle 12c или выше, вы можете попробовать использовать функцию JSON_TABLE:

SELECT jt.state
FROM order_log ol
CROSS JOIN json_table(
  '{'||ol.ord_details||'}', '$'
  COLUMNS (
    rate_area VARCHAR2(30) PATH '$.rateArea',
    state VARCHAR2(5) PATH '$.state',
    addr_comp VARCHAR2(100) PATH '$.addressComponent',
    msag VARCHAR2(100) PATH '$.msag'
  )
) jt;

Выход:

STATE
-----
MO

Протестируйте его онлайн с помощью db <> fiddle .

...