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

如何在SQL Server中操作XML?解析XML列数据生成指定格式结果

在SQL Server中解析XML并提取属性的解决方案

没问题,这在SQL Server里完全可以搞定,主要靠XML数据类型自带的.nodes()和.value()方法来拆分节点、提取属性值就行。

假设你的表名为PersonTable,存储XML内容的列名为XmlColumn,下面直接给你可用的查询语句:

SELECT
    -- 拼接名和姓,用CONCAT自动处理空值
    CONCAT(div_node.value('@firstname', 'NVARCHAR(100)'), ' ', div_node.value('@lastname', 'NVARCHAR(100)')) AS FullName,
    -- 提取缩写属性
    div_node.value('@initials', 'NVARCHAR(10)') AS Initials
FROM
    PersonTable
CROSS APPLY
    -- 把XML里的每个<div>节点拆成单独的行
    XmlColumn.nodes('//div') AS x(div_node)

关键细节解释:

  • .nodes('//div'):这个方法会遍历XML中所有的<div>节点,把每个节点转换成一行数据,//是递归查找的意思,不管节点在XML的哪个层级都能找到(如果你的XML有固定根节点,比如<root><div>...</div></root>,也可以写成/root/div来精确匹配)。
  • .value('@firstname', 'NVARCHAR(100)'):从每个<div>节点里提取firstname属性的值,第二个参数是指定返回的数据类型,你可以根据实际数据长度调整(比如改成NVARCHAR(50))。
  • CONCAT():用来拼接名和姓,比直接用+更友好——如果某个属性是空值,CONCAT()不会让整个结果变成NULL,而+会。要是你习惯用+,也可以写成div_node.value('@firstname', 'NVARCHAR(100)') + ' ' + div_node.value('@lastname', 'NVARCHAR(100)'),但记得提前处理空值哦。

测试效果:

如果你的XML列内容是:

<div firstname="Tom" lastname="Hanks" initials="TH" /> <div firstname="Tom" lastname="Hiddleston" initials="TH" />

执行上面的查询后,会得到这样的结果:

FullNameInitials
Tom HanksTH
Tom HiddlestonTH

额外注意:

  • 如果你的列不是XML类型(比如是VARCHAR/TEXT),得先转成XML类型再处理,把XmlColumn.nodes('//div')改成CAST(XmlColumn AS XML).nodes('//div')就行。
  • 如果XML里有命名空间,需要用WITH XMLNAMESPACES来声明,不过你的示例里没有,所以不用管这个。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:10:12