根据子元素的最大值在 SQL Server 中选择 XML 节点

2024-01-04

我试图根据位于子节点中的最大数据从 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

这个怎么样:

SELECT 
    TOP 1
    XMLCOL.value('(/user/name)[1]', 'nvarchar(20)') as 'UserName',
    Usr.Token.value('(id)[1]', 'nvarchar(20)') AS 'ID',
    Usr.Token.value('(endDate)[1]', 'DateTime') as 'EndDate'
FROM 
    dbo.MyTable
CROSS APPLY
    xmlcol.nodes('/user/token') AS Usr(Token)
ORDER BY
    Usr.Token.value('(endDate)[1]', 'DateTime') DESC

您基本上直接从 XML 中获取“原子”部分,例如“用户名”,然后交叉应用 /user/token 列表并提取所需的各个位 - 您将获得包含三列的结果集(用户名、ID、结束日期) ),您可以订购和过滤它们。

旁注:而不是这个:

XMLCOL.query('user/name').value('.','NVARCHAR(20)') 

你为什么不使用这个——感觉容易多了!

XMLCOL.value('(/user/name)[1]', 'NVARCHAR(20)') 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

根据子元素的最大值在 SQL Server 中选择 XML 节点 的相关文章

随机推荐

  • 在 unix 中将行转置为列

    我有下面给出的输入文件 输入文件 10 9 11 61432568509 118 1 20130810014023 46 440 4 GTEL 10 9 11 61432568509 118 1 20130810014023 46 440
  • 在 mac 10.9 中安装 libgd 时出错

    我正在尝试按照此处的说明在我的 mac OSX 10 9 上安装 libgd https mikewest org 2007 04 installing libgd from source on os x https mikewest or
  • IIO(字符)设备输出无输出 - IIO 缓冲区

    我正在为 ADC ADS1243 开发 Linux 驱动程序并使用 IIO 框架 我想添加一个功能来读取 ADC 数据并将其存储到 IIO 缓冲区 我添加了 iio triggered buffer setup 来探测驱动程序的功能 ret
  • 自动 vlookup 并将系数与 R 相乘

    我正在尝试用 R 统计编程语言 编写一个函数 该函数允许我自动计算线性回归 lm 问题 回归是通过 step 函数计算的 因此无法提前知道所选择的系数 问题 自动识别阶跃函数选择的系数 Vlookup 和交叉乘以结果的第二列 例如 View
  • AWS DAX 集群具有零缓存命中和缓存未命中

    我使用的是包含 3 个 dax r4 xlarge 节点类型节点的 AWS DAX 集群 当我从 EMR 集群运行 Spark 应用程序时 它始终从 dynamodb 表中获取值 即使我在同一组密钥上运行相同的应用程序 它也会查询 dyna
  • 当类使用泛型和泛型类型参数时如何获取正确的 MethodInfo 对象

    我想知道是否有人能够演示如何使用 Type 的 GetMethod 方法来检索以下签名的 MethodInfo 对象 Class StaticMethod
  • pycharm 无法识别 Git

    我正在尝试使用 pyCharm 从 bitbucket 中提取 github 存储库 我在版本控制 Git 下添加了 git 可执行文件的路径并安装了 bitbucket 插件 如果我测试两者 它表示测试运行良好 但是 当我现在打开终端并尝
  • MongoDB 中是否有命名集合的约定?

    我想知道数据库集合是否有约定 例如 PageVisit or page visit 这些符号有什么优点 缺点吗 一般约定是 小写名称 这可以避免区分大小写的问题 因为 MongoDB 集合名称是区分大小写 Plural 将某物的集合标记为复
  • Angular 4 不活动后重定向

    每当您在页面上处于非活动状态时 我都需要设置超时 假设您在页面上呆了 20 秒而没有点击任何内容 它会将您重定向到主屏幕 当前的代码不适用于不活动状态 我不知道如何使其工作 ngOnInit do init at here for curr
  • Laravel 4 中无法切换语言

    我尝试通过路由切换语言 但没有任何变化 请你帮帮我好吗 Route get lang lang function lang App setLocale lang return Redirect to App setLocale 不是持久性的
  • 为什么 django 中的大型查询(或一系列查询)后内存没有释放到系统?

    首先 DEBUG False在settings py中 所以不 connections default queries不会不断增长 直到耗尽所有内存 让我们从我已经加载的事实开始User表来自django contrib auth mode
  • 如何将类型“byte[]”转换为“System.Data.Linq.Binary”

    我的数据库中有一个 WorkflowInstances 表 其中包含以下字段 ID int Name nvarchar 50 WorkflowID int 文档 varbinary MAX 我想插入一个新的 WorkflowInstance
  • 如何使用 poi 更新 Excel 工作表链接

    我试图在使用 setForceFormulaRecal 方法后获取更新的单元格值 但我仍然保留旧价值观 这不是实际结果 如果我通过单击打开原始文件 它将询问更新链接对话框 如果我单击 确定 按钮 则它会更新所有单元格公式结果 所以我想在打开
  • 如何通过AccountManager.addaccountExternally()在android中添加google帐户?

    我想明确添加一个谷歌帐户 我将提供用户名和密码 我刚刚解决了这个问题呼叫者 uid XXXX 与验证者的 uid 不同 https stackoverflow com questions 3774282 securityexception
  • 基于explain的Mysql优化

    我有以下查询 需要很长时间才能执行 我需要加快速度 但我不知道该使用什么技术 这是查询 SELECT User id User username User password User role User created User modif
  • 使用 BeautifulSoup 获取第 n 个元素

    我想使用 BeautifulSoup 从一个大表中读取第 5 10 15 20 行 我该怎么做呢 findNextSibling 和递增计数器是正确的方法吗 你也可以使用findAll获取列表中的所有行 然后只需使用切片语法来访问您需要的元
  • 如何使用docker在两个容器之间进行通信

    我面临访问另一个容器中的一个容器路由的问题 例如我有两个微服务称为用户服务 and api网关 我正在尝试访问用户服务路线进入api网关 My api网关文件可能如下所示 const userServiceProxy httpProxy h
  • 标题和描述未使用 Collective.dexteritytextindexer 建立索引

    我有很多 Dexterity 内容类型 其中一些只是容器 只留下标题和描述 来自 plone app dexterity behaviors metadata IBasic 行为 我可以通过搜索标题或描述中的文本来找到它们 但对于我正在使用
  • 如果我在上一次运行退出后立即重新启动,则 socket.accept() 中的无效参数异常

    我有一个用 python 编写的客户端服务器架构 大多数时候它工作正常 但有时 在我停止服务器并立即重新启动后 我会收到以下错误 接受失败 原因是 22 消息参数无效 错误 Errno 22 参数无效 However 如果我等待几分钟并再次
  • 根据子元素的最大值在 SQL Server 中选择 XML 节点

    我试图根据位于子节点中的最大数据从 SQL Server 2005 XML 数据类型中选择一些值 我有多个行 其 XML 类似于以下内容 存储在 SQL Server 的字段中