我有以下XML,我想使用SQL提取FieldValue。我该怎么办?
<Field Group="Annuitant">
<FieldName>Contract Number</FieldName>
<FieldValue>TR13116544</FieldValue>
</Field>
谢谢
答案 0 :(得分:1)
DECLARE @xml XML=
'<Field Group="Annuitant">
<FieldName>Contract Number</FieldName>
<FieldValue>TR13116544</FieldValue>
</Field>';
-懒惰的方法
SELECT @xml.value('(//FieldValue)[1]','varchar(50)')
-更好
SELECT @xml.value('(/Field/FieldValue)[1]','varchar(50)')
-这就是您应该做的:尽可能具体...
SELECT @xml.value('(/Field/FieldValue/text())[1]','varchar(50)')
如果有-我认为-有几个<Field>
元素,而您需要选择严格的一个,则可以执行以下操作:
DECLARE @name VARCHAR(100)='Contract Number';
SELECT @xml.value('(/Field[(FieldName/text())[1]=sql:variable("@name")]/FieldValue/text())[1]','varchar(50)')
提示:您的问题不是很清楚,我这一边需要很多猜测。对于您的下一个问题,我要求您更具体。
答案 1 :(得分:0)
示例代码:
DECLARE @MyXML XML
SET @MyXML ='<SampleXML>
<Fruits>
<Fruits1>Apple</Fruits1>
<Fruits2>Pineapple</Fruits2>
</Fruits>
</SampleXML>'
SELECT
a.b.value('Fruits[1]/Fruits1[1]','varchar(10)') AS Fruits1,
a.b.value('Fruits[1]/Fruits2[1]','varchar(10)') AS Fruits2
FROM @MyXML.nodes('SampleXML') a(b)
答案 2 :(得分:0)
在oracle中,您可以执行以下操作:
WITH TABL (FIELD) AS (
select xmltype('<Field Group="Annuitant">
<FieldName>Contract Number</FieldName>
<FieldValue>TR13116544</FieldValue>
</Field>') from dual
)
SELECT
EXTRACTVALUE(FIELD,'/Field/FieldName') AS FIELDNAME,
EXTRACTVALUE(field,'/Field/FieldValue') AS FieldValue
FROM TABL ;