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

求助:MSSQL中REPLACE函数替换特定字符串失效问题

解决MSSQL中REPLACE替换指定模式字符串失效的问题

问题原因

REPLACE()函数是精确字符串匹配替换,不支持LIKE语法中的通配符(如%、[]),它会把这些符号当作普通字符去查找匹配项,自然找不到目标内容导致替换失效。而WHERE子句中的LIKE是有效的,因为LIKE本身就是为模式匹配设计的。

解决方案

根据你的需求(匹配任意大小写的“neptun -kód”并替换为“Neptunkód”),分两种场景处理:

场景1:使用REGEXP_REPLACE(SQL Server 2017及以上版本)

利用正则表达式匹配模式,直接替换符合规则的内容:

UPDATE VS_48538  
SET name = REGEXP_REPLACE(name, '[Nn]eptun\s-kód', 'Neptunkód')
WHERE name LIKE '%[N]eptun[ ][-]kód%'
  • [Nn]匹配大小写N
  • \s匹配空格(也可以直接写空格)
  • 正则模式能精准匹配你需要替换的目标片段

场景2:兼容低版本SQL Server(无REGEXP_REPLACE)

使用PATINDEX定位目标片段的位置,再用STUFF替换:

UPDATE VS_48538  
SET name = STUFF(name, PATINDEX('%[Nn]eptun [-]kód%', name), LEN('neptun -kód'), 'Neptunkód')
WHERE name LIKE '%[N]eptun[ ][-]kód%'
  • PATINDEX支持LIKE风格的通配符,能找到目标片段的起始位置
  • STUFF函数从找到的位置开始,替换对应长度的内容为目标字符串

补充:如果需要替换所有大小写变体

如果要覆盖更多大小写组合(比如Neptun -Kód、NEPTUN -KÓD等),可以先统一转换大小写再替换(注意:此方法会改变原字符串其他部分的大小写):

UPDATE VS_48538  
SET name = REPLACE(LOWER(name), 'neptun -kód', 'Neptunkód')
WHERE name LIKE '%[N]eptun[ ][-]kód%'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 11:25:33