在MySQL中如何删除字符串中括号及括号内的特定内容?
MySQL删除字段中括号及括号内内容的实现方案
原语句失效原因
REPLACE 函数是精确匹配替换,不支持 LIKE 语法中的 % 通配符,你之前的写法相当于要替换字段中完全等于 (%) 的子串,不存在这类内容自然不会生效。
实现方案
方案1:MySQL 8.0及以上版本(推荐)
直接使用MySQL内置的正则替换函数 REGEXP_REPLACE 即可实现全局匹配替换,正则规则 \([^)]*\) 会匹配所有左括号到对应右括号的全部内容:
-- 先执行SELECT验证替换效果,确认无误再执行UPDATE SELECT city 原始值, TRIM(REPLACE(REGEXP_REPLACE(city, '\\([^)]*\\)', ''), ' ', ' ')) 替换后值 FROM 你的实际表名 WHERE city REGEXP '\\([^)]*\\)'; -- 确认效果后执行更新,注意替换为实际表名 UPDATE 你的实际表名 SET city = TRIM(REPLACE(REGEXP_REPLACE(city, '\\([^)]*\\)', ''), ' ', ' ')) WHERE city REGEXP '\\([^)]*\\)';
说明:额外的
TRIM和空格替换是为了处理括号删除后遗留的多余空格,比如New (NY) York替换后会变成New York,处理后会修正为New York。
方案2:MySQL 5.x旧版本
旧版本没有内置正则替换函数,可通过定位括号位置的方式实现,单括号场景单次执行即可,有多对括号的场景重复执行直到影响行数为0:
-- 先验证效果 SELECT city 原始值, TRIM(REPLACE(CONCAT( LEFT(city, LOCATE('(', city) - 1), SUBSTRING(city, LOCATE(')', city) + 1) ), ' ', ' ')) 替换后值 FROM 你的实际表名 WHERE city LIKE '%(%)%'; -- 执行更新 UPDATE 你的实际表名 SET city = TRIM(REPLACE(CONCAT( LEFT(city, LOCATE('(', city) - 1), SUBSTRING(city, LOCATE(')', city) + 1) ), ' ', ' ')) WHERE city LIKE '%(%)%';
注意事项
执行UPDATE前建议先备份表数据,避免误操作导致数据丢失。
内容的提问来源于stack exchange,提问作者gaphalpa
相关产品推荐
相关产品推荐

