首页 > 解决方案 > 如何使用 REGEX_SUBSTR

问题描述

我需要从长字符串中提取子字符串。我尝试了以下查询但不起作用,它返回我 NULL,我想提取<cc>和之间的第一个值 12</cc>

select regexp_substr('<CC>3</CC><CN>ROSSI</CN><NO>MARIO</NO><IN>VIA DELLE MIMOSE 4</IN>,'<CN>[^</CN>]*') 
"REGEXPR_SUBSTR"
FROM DUAL;

结果我得到了,<CN>ROSSI但我也想消除 <CN>,有什么建议吗?

标签: sqlregexoracle

解决方案


不要使用正则表达式来解析 XML 数据;使用适当的 XML 解析器:

SELECT t.*
FROM   XMLTABLE(
         '/root'
         PASSING XMLTYPE(
           '<root>'
           || '<CC>3</CC><CN>ROSSI</CN><NO>MARIO</NO><IN>VIA DELLE MIMOSE 4</IN>'
           || '</root>'
         )
         COLUMNS
           cc NUMBER PATH './CC',
           cn VARCHAR2(20) PATH './CN',
           no VARCHAR2(20) PATH './NO',
           "IN" VARCHAR2(50) PATH './IN'
       ) t

哪个输出:

抄送 | 中文 | 否 | 在                
-: | :---- | :---- | :-----------------
 3 | 罗西 | 马里奥 | 通过戴尔 MIMOSE 4

db<>在这里摆弄


推荐阅读