在SQL中使用相同的节点名捕获多个XML字符串

时间:2015-05-06 01:39:48

标签: sql sql-server xml nodes

在XML字符串世界中编织我 - 我遇到过这个问题。

所以我有两个彼此超级相似的XML字符串 - 唯一的是 - 它们在节点内部有不同的信息。

XML字符串1:

RewriteRule ^member-login/?$ /login/ [L]

XML String 2:

<DocumentElement>
 <Readings>
  <ReadingID>1</ReadingID>
  <ReadingDate>2013-12-19T00:00:00-05:00</ReadingDate>
  <Sys>120</Sys>
  <Dia>80</Dia>
  <PageNumber>4</PageNumber>
  <AddedDate>2015-04-17T19:30:22.2255116-04:00</AddedDate>
  <UpdateDate>2015-04-17T19:30:22.2255116-04:00</UpdateDate>
 </Readings>
 <Readings>
  <ReadingID>2</ReadingID>
  <ReadingDate>2014-01-10T00:00:00-05:00</ReadingDate>
  <Sys>108</Sys>
  <Dia>86</Dia>
  <PageNumber>8</PageNumber>
  <AddedDate>2015-04-17T19:32:08.5121747-04:00</AddedDate>
  <UpdateDate>2015-04-17T19:32:08.5121747-04:00</UpdateDate>
 </Readings>
</DocumentElement>

现在这只是一个例子 - 我可以拥有无​​限量的字符串,就像我想要从中提取数据一样。在这种情况下,我有两个字符串,我希望提取<DocumentElement> <Readings> <ReadingID>1</ReadingID> <ReadingDate>2013-12-20T00:00:00-05:00</ReadingDate> <Sys>140</Sys> <Dia>70</Dia> <PageNumber>10</PageNumber> <AddedDate>2015-04-17T19:30:22.2255116-04:00</AddedDate> <UpdateDate>2015-04-17T19:30:22.2255116-04:00</UpdateDate> </Readings> </DocumentElement> <Sys><Dia>

上的所有信息

我还想在这样的表格中显示这些信息:

<ReadingDate>

我完全不确定如何继续这一点 - 感谢任何所有帮助!

1 个答案:

答案 0 :(得分:2)

假设这些XML位于名为MyXmlColumn的XML列中,在名为MyTable *的表中,您可以尝试这样的事情:

SELECT
    R.value('ReadingDate[1]', 'DATETIME') as ReadingDate
    , R.value('Sys[1]', 'INT') as Sys
    , R.value('Dia[1]', 'INT') as Dia
FROM MyTable t
     CROSS APPLY t.MyXmlColumn.nodes('/DocumentElement/Readings') as readings(R)

<强> SQL Fiddle

*:下次你应该首先提供这些信息