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

SQL中如何根据OP_NO列移除NEXT_OP_NO列中的指定字符串?

移除NEXT_OP_NO列中的指定值'130'

假设你的NEXT_OP_NO列是逗号分隔的数字字符串(比如'120,130,140'或'130,150'),以下两种方法可以精准移除其中的'130',同时避免处理后出现多余分隔符:

方法1:嵌套REPLACE处理(兼容多数SQL版本)

通过多层替换处理不同位置的'130',再清理首尾多余逗号:

UPDATE 你的数据表名
SET NEXT_OP_NO = 
    CASE 
        -- 单独的'130'直接设为空
        WHEN NEXT_OP_NO = '130' THEN ''
        ELSE
            TRIM(',' FROM 
                REPLACE(
                    REPLACE(NEXT_OP_NO, ',130,', ','), 
                    '130,', ''
                )
            )
    END
WHERE CHARINDEX('130', NEXT_OP_NO) > 0;

逻辑说明:

  1. 先用REPLACE(NEXT_OP_NO, ',130,', ',')处理中间的',130,',替换为单个逗号,避免出现连续逗号
  2. 再用REPLACE(..., '130,', '')处理开头的'130,'
  3. 最后用TRIM(',' FROM ...)去掉首尾残留的逗号
  4. 单独的'130'直接置为空字符串

方法2:拆分-过滤-聚合(SQL Server 2017+推荐)

这种方法更稳妥,适合复杂的字符串场景:

UPDATE t
SET NEXT_OP_NO = agg.new_value
FROM 你的数据表名 t
CROSS APPLY (
    SELECT STRING_AGG(value, ',') AS new_value
    FROM STRING_SPLIT(t.NEXT_OP_NO, ',')
    WHERE value <> '130'
) agg
WHERE CHARINDEX('130', t.NEXT_OP_NO) > 0;

逻辑说明:

  1. 用STRING_SPLIT把NEXT_OP_NO按逗号拆分成独立行
  2. 过滤掉等于'130'的行
  3. 用STRING_AGG将剩余值重新拼接为逗号分隔的字符串
  4. 自动处理所有位置的'130',不会产生多余分隔符

测试建议

执行更新前,先通过SELECT语句验证处理结果:

-- 方法1测试
SELECT 
    NEXT_OP_NO AS 原值,
    CASE 
        WHEN NEXT_OP_NO = '130' THEN ''
        ELSE TRIM(',' FROM REPLACE(REPLACE(NEXT_OP_NO, ',130,', ','), '130,', ''))
    END AS 处理后值
FROM 你的数据表名
WHERE CHARINDEX('130', NEXT_OP_NO) > 0;

-- 方法2测试
SELECT 
    t.NEXT_OP_NO AS 原值,
    agg.new_value AS 处理后值
FROM 你的数据表名 t
CROSS APPLY (
    SELECT STRING_AGG(value, ',') AS new_value
    FROM STRING_SPLIT(t.NEXT_OP_NO, ',')
    WHERE value <> '130'
) agg
WHERE CHARINDEX('130', t.NEXT_OP_NO) > 0;

内容的提问来源于stack exchange,提问作者Armando Rui Guimarães

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:35:27