我在 Oracle 12数据库中有一个表MYTABLE
和列MYXML
。 MYXML
列包含如下所示的长度可变的字符串-
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:NodeData xmlns:ns2="http://abcd.org/xyz/schema/">
<Head msgId="ACVF63980FGQW56123" orgId="12345" ts="2017-04-13T18:37:27+05:30" ver="1.0"/>
<Info>
<Identity id="45298" verifiedName="MFROMLA" type="TECH"/>
<Rating name="HIGH"/>
</Info>
<Node Name="PQ" Desc="PreQualified" NodeID="2387ajdh231dqhhg21098"/>
</ns2:NodeData>
我想使用SQL查询从此列值中仅提取PQ
。我怎么做?如果可能,我应该可以使用Name
标签进行搜索并提取其值。
答案 0 :(得分:1)
这是一个您可以使用的查询,它从您的xml字符串中提取节点Name
的属性Node
。假设MYXML
数据类型为VARCHAR2
SELECT EXTRACT(xmltype(myxml), '/Node/@Name')
FROM mytable;
答案 1 :(得分:0)
如果您的列是varchar2
,则可以使用字符串方法;例如,有和没有正则表达式的两种方式:
SELECT substr(myXml, 13, instr(myXml, '"', 1, 2) - 13),
regexp_substr(myXml, '"([^"]+)"', 1, 1, 'i', 1)
FROM mytable
如果您的列是XMLTYPE
,则可以使用XML方法:
SELECT EXTRACT(myXml, '/Node/@Name')
from myTable
答案 2 :(得分:0)
这对我有用-
select name from mytable, xmltable(xmlnamespaces ('http://abcd.org/xyz/schema/' as "ns2"),'ns2:NodeData/Node' passing xmltype(myxml) columns name varchar2(50) path '@Name');