编写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
相关产品推荐
相关产品推荐

