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

编写UPDATE脚本从DistributionList列移除'me@me.com'邮箱地址

移除SQL Server表中字符串列指定邮箱地址的UPDATE脚本

嗨,我来帮你搞定这个问题!咱们先明确场景:你的临时表#EXAMPLE里,DistributionList列是用分号分隔的邮箱字符串,需要把每条记录里的me@me.com移除,还要覆盖各种可能出现的情况——比如这个邮箱单独存在、在开头/中间/结尾,甚至字段值是字符串'NULL'的情况(注意这不是SQL的NULL值哦)。

第一步:确认测试数据

先把你提供的测试表创建代码放出来,方便后续验证:

DROP TABLE IF EXISTS #EXAMPLE; 
CREATE TABLE #EXAMPLE(DistributionList VARCHAR(250)); 
INSERT INTO #EXAMPLE values 
    ('x@x.com; y@y.co.uk; me@me.com;'), 
    ('me@me.com; a@a.com;'), 
    ('me@me.com;'), 
    ('NULL'), 
    ('z@z.com; me@me.com;'), 
    ('NULL'), 
    ('c@c.co.uk; me@me.com; xx@x.com;'), 
    ('NULL'); 
SELECT * FROM #EXAMPLE;

第二步:编写UPDATE脚本

下面这个脚本会处理所有可能的场景,确保me@me.com被干净移除:

UPDATE #EXAMPLE
SET DistributionList = 
    CASE 
        -- 情况1:字段本身就是单独的'me@me.com;'或'me@me.com',直接清空
        WHEN DistributionList IN ('me@me.com;', 'me@me.com') THEN ''
        -- 情况2:目标邮箱在字符串开头(带分号),移除开头的这个邮箱
        WHEN DistributionList LIKE 'me@me.com;%' THEN STUFF(DistributionList, 1, LEN('me@me.com;'), '')
        -- 情况3:目标邮箱在字符串中间(前后都有分号),替换掉中间的这个邮箱部分
        WHEN DistributionList LIKE '%; me@me.com;%' THEN REPLACE(DistributionList, '; me@me.com;', ';')
        -- 情况4:目标邮箱在字符串结尾(前面有分号),移除结尾的这个邮箱
        WHEN DistributionList LIKE '%; me@me.com' THEN LEFT(DistributionList, LEN(DistributionList) - LEN('; me@me.com'))
        -- 其他情况(包括'NULL'字符串、不包含目标邮箱的记录)保持原样
        ELSE DistributionList
    END;

-- 可选:如果想把处理后为空的字段改成和原数据一致的'NULL'字符串,执行下面这行
UPDATE #EXAMPLE
SET DistributionList = 'NULL'
WHERE DistributionList = '';

第三步:验证结果

执行完上面的UPDATE后,用下面的查询查看处理后的结果:

SELECT * FROM #EXAMPLE;

你会得到符合预期的结果:

  • 第一条记录变成 x@x.com; y@y.co.uk;
  • 第二条变成 a@a.com;
  • 第三条变成 NULL
  • 第四、六、八条保持NULL
  • 第五条变成 z@z.com;
  • 第七条变成 c@c.co.uk; xx@x.com;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:16:36