【问题标题】:SQL query to get most recent date from XML document从 XML 文档获取最新日期的 SQL 查询
【发布时间】:2016-12-20 16:57:26
【问题描述】:

我正在对包含 XML 文档的列执行 SQL 查询。

XML 文档如下所示。

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

如您所见,日期不正确。

我正在寻找可以从 XML 文档中获取最新日期的 SQL 查询(在本例中为:2016-12-01)。

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • Microsoft SQL Server

标签: sql sql-server xml


【解决方案1】:

一种方法是读取所有数据并在外部找到最大值(外部 ORDER BYTOP 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,找到最高的!

这两种方法都需要读取整个列表,但只查找最大值应该更快一些,而不是返回一个完整列表并进行一些外部排序,然后再次挑选......

【讨论】:

  • 很高兴知道.. 你的 xml 答案确实令人印象深刻 +1
【解决方案2】:

试试这个

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 

【讨论】:

  • 嗨,Prdp,如果不需要,您应该避免在某些地方使用//深度搜索)。试想一下,在一个更大的 XML 中有一个与您的根元素同名的元素......无论如何,说 嘿!从根开始并沿着路径导航! 然后询问任何名为 root... 的元素
猜你喜欢
  • 1970-01-01
  • 2021-06-26
  • 2020-07-04
  • 2018-04-06
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多