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

SQL Server 2019中如何去除逗号分隔字符串重复值并更新表

在SQL Server 2019中去除逗号分隔列的重复值

针对你的需求,可以利用SQL Server 2017及以上版本支持的STRING_SPLIT和STRING_AGG函数实现,具体操作如下:

实现思路

  1. 用STRING_SPLIT将BuildingNumbers列的逗号分隔字符串拆分为单独行记录
  2. 对拆分后的楼宇编号去重
  3. 借助STRING_AGG将去重后的编号重新合并为逗号分隔的字符串
  4. 通过CTE(公共表表达式)关联原表,执行更新操作

具体SQL语句

请将语句中的YourTableName替换为你的实际表名:

WITH CleanedBuildings AS (
    SELECT 
        Id,
        -- 按数值排序合并,保证编号顺序符合预期
        STRING_AGG(value, ',') WITHIN GROUP (ORDER BY CONVERT(INT, value)) AS UniqueBuildingNumbers
    FROM YourTableName
    -- 拆分逗号分隔的字符串
    CROSS APPLY STRING_SPLIT(BuildingNumbers, ',')
    -- 按Id分组,确保每行的编号单独处理
    GROUP BY Id
)
-- 更新原表
UPDATE t
SET t.BuildingNumbers = c.UniqueBuildingNumbers
FROM YourTableName t
INNER JOIN CleanedBuildings c ON t.Id = c.Id;

验证结果(可选)

执行更新前,建议先运行以下查询确认处理结果是否符合预期:

SELECT 
    t.Id,
    t.PropertyNumber,
    c.UniqueBuildingNumbers
FROM YourTableName t
INNER JOIN (
    SELECT 
        Id,
        STRING_AGG(value, ',') WITHIN GROUP (ORDER BY CONVERT(INT, value)) AS UniqueBuildingNumbers
    FROM YourTableName
    CROSS APPLY STRING_SPLIT(BuildingNumbers, ',')
    GROUP BY Id
) c ON t.Id = c.Id;

注意事项

  • 该方案仅适用于SQL Server 2017及以上版本(你的SQL Server 2019完全满足)
  • 如果BuildingNumbers包含非数字编号,可调整ORDER BY中的转换逻辑,或直接去掉ORDER BY(但可能打乱原顺序)
  • 若存在BuildingNumbers为空字符串或NULL的行,语句会自动保留原状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:25:21