我试图根据位于子节点中的最大数据从 SQL Server 2005 XML 数据类型中选择一些值。
我有多个行,其 XML 类似于以下内容,存储在 SQL Server 的字段中:
<user>
<name>Joe</name>
<token>
<id>ABC123</id>
<endDate>2013-06-16 18:48:50.111</endDate>
</token>
<token>
<id>XYX456</id>
<endDate>2014-01-01 18:48:50.111</endDate>
</token>
</user>
我想从此 XML 列中执行选择,它确定令牌元素内的最大日期,并为每条记录返回类似于以下结果的数据行:
乔 XYZ456 2014-01-01
18:48:50.111
我试图为 xpath 找到一个 max 函数,它可以让我选择正确的标记元素,但我找不到一个可行的。
我还尝试使用 SQL MAX 函数,但我也无法使用该方法使其工作。
如果我只有一个令牌,它当然可以正常工作,但是当我有多个令牌时,我会得到 NULL,很可能是因为查询不知道要提取哪个日期。我希望有一种方法可以指定 where 子句[max(endDate)]
在 token 元素上,但还没有找到一种方法来做到这一点。
这是当我只有一个令牌时有效的示例:
SELECT
XMLCOL.query('user/name').value('.','NVARCHAR(20)') as name
XMLCOL.query('user/token/id').value('.','NVARCHAR(20)') as id
XMLCOL.query('user/token/endDate').value(,'xs:datetime(.)','DATETIME') as endDate
FROM MYTABLE