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

如何在SQL Server中去除逗号分隔字符串的重复值(不使用函数)

解决SQL Server逗号分隔字符串去重(无需自定义函数)

你的思路其实很靠谱,用XML的distinct-values方法来实现去重是个简洁的方案,只是之前的代码里藏了个小细节错误——你替换分隔符时用的是, (逗号加空格),但原始字符串里的分隔符是纯逗号,,没有空格,这就导致XML节点没被正确拆分,自然没法完成去重。

直接给你修正后的完整可运行代码:

Declare @data varchar(max) = '34.22,768.55,34.22,123.34,12,999.0,999.0'
SET @data = (
    SELECT CAST(
        CAST('<d>' + REPLACE(@data, ',', '</d><d>') + '</d>' AS XML).query('distinct-values(/d)') 
        AS varchar(max)
    )
)
SELECT @data AS 去重后的结果

修正点说明

  • 把replace(@data, ', ',',</d><d>')改成REPLACE(@data, ',', '</d><d>'),让每个纯逗号都被替换成XML节点的闭合+开启标签,这样原始字符串里的每个数值都会被拆分成独立的<d>节点。
  • XML的distinct-values()方法会自动剔除节点中的重复值,最后转换回varchar类型,就能得到你要的去重后字符串。

运行这段代码后,会直接输出预期结果:34.22,768.55,123.34,12,999.0

额外提个小补充:如果你的字符串后续可能包含<、&这类XML特殊字符,可以搭配FOR XML PATH('')做转义处理,但当前场景都是数值,上面的方案完全够用。

内容的提问来源于stack exchange,提问作者Ashwanth K A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:38:58