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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:09