SQL Server使用REPLACE函数替换字符串结果异常如何解决
问题原因
嵌套REPLACE函数从内层向外层执行:原语句内层逻辑会先把字段中所有Manchester替换为Highgarden,原本的South Manchester会被提前处理为South Highgarden,外层执行时已找不到South Manchester匹配项,无法完成预期替换,最终出现错误拼接结果。
另外原语句中King’s Landing使用了排版弯单引号,SQL Server中字符串内的单引号需要通过两个连续单引号转义,也可能引发匹配或语法问题。
解决方案
方案1:调整REPLACE顺序(适用于字段内容包含目标子串的场景)
多字符串替换遵循长串优先、精确匹配优先原则,先替换更长的South Manchester,再替换短串Manchester,避免短串替换提前破坏长串匹配结构,修正语句如下:
UPDATE Correspondence SET [Name] = REPLACE( REPLACE([Name], 'South Manchester', 'King''s Landing'), 'Manchester', 'Highgarden' )
方案2:CASE WHEN精确匹配(适用于字段整值完全等于目标值的场景)
如果[Name]字段是整值完全匹配两个目标值、不存在子串包含情况,用CASE WHEN写法逻辑更直观,不存在替换顺序干扰问题:
UPDATE Correspondence SET [Name] = CASE [Name] WHEN 'South Manchester' THEN 'King''s Landing' WHEN 'Manchester' THEN 'Highgarden' ELSE [Name] END
内容的提问来源于stack exchange,提问作者rapha123
相关产品推荐
相关产品推荐

