Получение максимального значения из узла XML в SQL Server 2008 - PullRequest
2 голосов
/ 11 января 2012

У меня есть несколько 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 еще до того, как начну.

Я пытался выяснить, как применить крест, но не могу заставить его работать. Любая помощь будет оценена.

1 Ответ

4 голосов
/ 11 января 2012

Если ваш 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'
...