从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'
感谢乔 - 你的男人!还有一个附加 - 因为我想用这个ddl作为视图,所以我没有一个变量@xml。有没有一种方法可以引用列行Cast(main.data as xml).nodes ...? – 2012-01-10 22:51:34
不知道这对我有用。我试图在创建视图脚本中使用它来为关联的行返回一个值,并且无法选择并在我的ddl脚本中将我的nvarchar(max)列转换为@xml。我错过了什么吗? – 2012-01-10 23:06:54