You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL中按属性查询XML列?匹配指定time属性值

查询XML列中符合特定属性条件的行

SQL Server 实现方式

假设你的表名为YourTableName,XML列是Configuration,要筛选arrivalSla节点的time属性等于"04:00:00"的行,有两种常用写法:

方法1:使用exist()方法(性能更优)

SELECT *
FROM YourTableName
WHERE Configuration.exist('/feed/schedule/arrivalSla/@time[. = "04:00:00"]') = 1
  • 说明:exist()方法检查XML中是否存在匹配的属性,返回1表示存在符合条件的记录。XPath表达式/feed/schedule/arrivalSla/@time精准定位到目标属性,后续条件筛选属性值等于"04:00:00"的情况。

方法2:提取属性值后筛选

如果需要同时返回该属性值,或者更直观地筛选,可以用value()方法提取属性值再判断:

SELECT 
    *,
    Configuration.value('(/feed/schedule/arrivalSla/@time)[1]', 'varchar(8)') AS ArrivalTime
FROM YourTableName
WHERE Configuration.value('(/feed/schedule/arrivalSla/@time)[1]', 'varchar(8)') = '04:00:00'
  • 说明:value()方法从XML中提取指定属性的值,第二个参数定义返回值的数据类型。[1]确保只取第一个匹配的arrivalSla节点的time属性(若存在多个同类节点)。

PostgreSQL 实现方式

如果使用PostgreSQL,XML列类型为xml,可以用xpath()函数筛选:

SELECT *
FROM YourTableName
WHERE xpath('/feed/schedule/arrivalSla/@time', Configuration) @> ARRAY['04:00:00']::text[]
  • 说明:xpath()函数返回匹配的属性值数组,@>操作符判断数组是否包含目标值"04:00:00"。

注意事项

  • 如果XML存在命名空间,需要先声明命名空间才能正确定位节点。比如SQL Server要添加WITH XMLNAMESPACES前缀,PostgreSQL要在XPath中指定命名空间。
  • 若XML结构中有多个arrivalSla节点,上述写法会匹配任意一个节点属性符合条件的行;若需所有节点都满足条件,需调整XPath表达式。

内容的提问来源于stack exchange,提问作者Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 03:31:36