如何在不包括模式开头的情况下输出模式?
How to output a pattern without including the beginning of the pattern?
我正在尝试从 Orcale 中的 CLOB 中提取两个字符。例如,CLOB 列如下所示:
"rateArea":"KCMO","state":"MO","addressComponent":null,"msag":null
我写了:
SELECT
REGEXP_SUBSTR( ORD_DETAILS, 'state":"+\w\w' ) state
from order_log
这给了我输出 - state":"MO
我只想 MO
作为我的输出。
能否建议所需输出的正则表达式代码?
使用捕获组。 REGEXP_SUBSTR()
采用可选参数来指定要提取的组而不是整个匹配项。
SELECT REGEXP_SUBSTR( ORD_DETAILS, 'state":"+(\w\w)', 1, 1, NULL, 1) state
FROM order_log
您的数据与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 在线测试。
我正在尝试从 Orcale 中的 CLOB 中提取两个字符。例如,CLOB 列如下所示:
"rateArea":"KCMO","state":"MO","addressComponent":null,"msag":null
我写了:
SELECT
REGEXP_SUBSTR( ORD_DETAILS, 'state":"+\w\w' ) state
from order_log
这给了我输出 - state":"MO
我只想 MO
作为我的输出。
能否建议所需输出的正则表达式代码?
使用捕获组。 REGEXP_SUBSTR()
采用可选参数来指定要提取的组而不是整个匹配项。
SELECT REGEXP_SUBSTR( ORD_DETAILS, 'state":"+(\w\w)', 1, 1, NULL, 1) state
FROM order_log
您的数据与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 在线测试。