我正在尝试从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
作为输出。
您能建议所需输出的正则表达式代码吗?
答案 0 :(得分:1)
使用捕获组。 REGEXP_SUBSTR()
使用一个可选参数来指定要提取整个匹配项的组。
SELECT REGEXP_SUBSTR( ORD_DETAILS, 'state":"+(\w\w)', 1, 1, NULL, 1) state
FROM order_log
答案 1 :(得分:0)
您的数据与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在线进行测试。