繁体   English   中英

从SQL Server 2008中的XML节点获取最大值

[英]Getting a max value from a node of XML in SQL Server 2008

我有一些这样的xml

<variable>
  <historicDates>
    <item>
      <date>2012/01/13</date>
      <type>submitted</type>
    </item>
    <item>
      <date>2012/01/12</date>
      <type>required</type>
    </item>
    <item>
      <date>2012/01/11</date>
      <type>required</type>
    </item>
  </historicDates>
</variable>

我正在尝试编写一条sql语句以获取类型等于要求的最大日期。 为了解决这个问题,我将该列设置为nvarchar(max),所以我知道即使在开始之前也必须将其强制转换为xml。

我试图弄清楚交叉应用程序,但无法正常工作。 任何帮助,将不胜感激。

假设您的XML位于名为@xml的变量中:

SELECT MAX(t.ItemDate)
    FROM (SELECT Tbl.Col.value('date[1]', 'datetime') AS ItemDate,  
                 Tbl.Col.value('type[1]', 'varchar(20)') AS ItemType 
              FROM @xml.nodes('//variable/historicDates/item') Tbl(Col)) t
    WHERE t.ItemType = 'required'

由于您指定了SQL Server 2008,因此您还可以在此处使用CTE:

WITH cteXMLtoTable AS (
    SELECT Tbl.Col.value('date[1]', 'datetime') as ItemDate,  
           Tbl.Col.value('type[1]', 'varchar(20)') as ItemType 
        FROM @xml.nodes('//variable/historicDates/item') Tbl(Col)
)
SELECT MAX(ItemDate)
    FROM cteXMLtoTable
    WHERE ItemType = 'required'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM