我正在对一个带有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)。
答案 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
并找到最高值!
这两种方法都需要读取整个列表,但只有查找最大值才会快一点,而不是返回完整列表并进行一些外部排序,再次选择......