从XML节点在SQL Server中获得一个最大值2008

问题描述:

我有这样从XML节点在SQL Server中获得一个最大值2008

<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> 

一些XML我想写一个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' 
+0

感谢乔 - 你的男人!还有一个附加 - 因为我想用这个ddl作为视图,所以我没有一个变量@xml。有没有一种方法可以引用列行Cast(main.data as xml).nodes ...? – 2012-01-10 22:51:34

+0

不知道这对我有用。我试图在创建视图脚本中使用它来为关联的行返回一个值,并且无法选择并在我的ddl脚本中将我的nvarchar(max)列转换为@xml。我错过了什么吗? – 2012-01-10 23:06:54