SQL从XML提取值

时间:2018-10-04 08:30:36

标签: sql xml

我有以下XML,我想使用SQL提取FieldValue。我该怎么办?

  <Field Group="Annuitant">
    <FieldName>Contract Number</FieldName>
    <FieldValue>TR13116544</FieldValue>
  </Field>

谢谢

3 个答案:

答案 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  ;