在SQLServer2008中从XML节点获取最大值

在SQLServer2008中从XML节点获取最大值,sql,sql-server,xml,max,Sql,Sql Server,Xml,Max,我有一些像这样的xml <variable> <historicDates> <item> <date>2012/01/13</date> <type>submitted</type> </item> <item> <date>2012/01/12</date> <type>re

我有一些像这样的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语句,以获取类型等于所需的最大日期。为了使问题更加复杂,我的专栏是一个nvarcharmax,所以我知道我必须在开始之前将其转换为xml


我试图找出交叉应用,但无法使其发挥作用。任何帮助都将不胜感激。

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

由于您指定了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'

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

由于您指定了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'

谢谢乔-你的男人!!还有一个附加组件——因为我试图将这个ddl用于视图,所以我没有@xml变量。有没有一种方法可以将列行Castmain.data引用为xml.nodes…?我不知道这是如何工作的。我试图在创建视图脚本中使用它来返回关联行的值,但无法在ddl脚本中选择nvarcharmax列并将其强制转换为@xml。我错过什么了吗?谢谢乔-你的男人!!还有一个附加组件——因为我试图将这个ddl用于视图,所以我没有@xml变量。有没有一种方法可以将列行Castmain.data引用为xml.nodes…?我不知道这是如何工作的。我试图在创建视图脚本中使用它来返回关联行的值,但无法在ddl脚本中选择nvarcharmax列并将其强制转换为@xml。我错过什么了吗?