用于从XML文档获取最新日期的SQL查询

时间:2016-12-20 16:57:26

标签: sql sql-server xml

我正在对一个带有XML文档的列进行SQL查询。

XML文档如下所示。

<root>
    <date>2016-10-12</date>
    <date>2016-12-01</date>
    <date>2016-11-13</date>
</root>    

正如您所看到的,日期已经无序。

我正在寻找一个SQL查询,它将从XML文档中获取最新日期(在本例中为2016-12-01)。

2 个答案:

答案 0 :(得分:1)

试试这个

DECLARE @xml XML

SET @xml = '<root>
    <date>2016-10-12</date>
    <date>2016-12-01</date>
    <date>2016-11-13</date>
     </root>'

SELECT Top 1 x.col.value('.', 'date') AS dates
FROM   @xml.nodes('/root/date') x(col)
ORDER  BY dates DESC 

答案 1 :(得分:1)

一种方法是阅读所有数据并在外部找到最大值(外部ORDER BY使用TOP 1,如Prdp的答案,或MAX(),最终使用GROUP BY)。

另一种方式是FLWOR-XQuery

DECLARE @xml XML=
'<root>
    <date>2016-10-12</date>
    <date>2016-12-01</date>
    <date>2016-11-13</date>
</root>';

SELECT @xml.value('max(for $d in /root/date return xs:date($d))','date')

这意味着:

获取/root/date中的每个值,将其返回为date并找到最高值!

这两种方法都需要读取整个列表,但只有查找最大值才会快一点,而不是返回完整列表并进行一些外部排序,再次选择......