【问题标题】:Getting a max value from a node of XML in SQL Server 2008从 SQL Server 2008 中的 XML 节点获取最大值
【发布时间】:2012-01-11 06:45:22
【问题描述】:

我有一些这样的 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。

我试图弄清楚交叉应用,但无法让它工作。任何帮助将不胜感激。

【问题讨论】:

    标签: sql sql-server xml max


    【解决方案1】:

    假设您的 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 ...?
    • 不确定这对我有什么用。我试图在创建视图脚本中使用它来返回关联行的值,并且无法选择我的 nvarchar(max) 列并将其转换为我的 ddl 脚本中的@xml。我错过了什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多