2012-01-10 87 views
2

我有這樣從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。

我試圖找出交叉應用,但不能得到它的工作。任何幫助,將不勝感激。

回答

3

假設你的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

相關問題