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

如何使用正则表达式移除MySQL列中括号包裹的文本(含括号)

MySQL去除括号内容及残留空格解决方案

针对MySQL 8.0+版本(推荐)

直接使用REGEXP_REPLACE结合TRIM函数即可完成需求,一步到位处理括号内容和残留空格:

SELECT 
  TRIM(REGEXP_REPLACE(REGEXP_REPLACE(your_column, '\\([^)]*\\)', ''), '\\s+', ' ')) AS cleaned_text
FROM your_table;

逻辑拆解:

  1. 删除括号及内部内容:REGEXP_REPLACE(your_column, '\\([^)]*\\)', '')
    • \\( 和 \\) 是转义后的左右括号(正则中括号属于特殊字符,必须转义)
    • [^)]* 匹配任意非右括号的字符,确保仅匹配到当前括号对的内容,不会跨括号匹配
  2. 合并连续空格:REGEXP_REPLACE(..., '\\s+', ' ')
    • 将处理后产生的多个连续空白字符(空格、换行、制表符等)替换为单个空格
  3. 去除首尾空格:TRIM(...)
    • 清理文本开头和结尾的多余空格,保证结果整洁

测试验证:

原始数据处理后结果
foo (bar)foo
foo (bar 5) (foo)foo
foo (bar) bar (foobar) foofoo bar foo

针对MySQL 5.x版本(无REGEXP_REPLACE支持)

如果无法升级版本,可以自定义函数实现相同逻辑:

DELIMITER //
CREATE FUNCTION clean_text(input_text TEXT) 
RETURNS TEXT
DETERMINISTIC
BEGIN
  DECLARE temp_text TEXT;
  DECLARE open_pos INT;
  DECLARE close_pos INT;
  
  SET temp_text = input_text;
  
  -- 循环删除所有括号对及内容
  WHILE LOCATE('(', temp_text) > 0 AND LOCATE(')', temp_text) > LOCATE('(', temp_text) DO
    SET open_pos = LOCATE('(', temp_text);
    SET close_pos = LOCATE(')', temp_text);
    SET temp_text = CONCAT(SUBSTRING(temp_text, 1, open_pos - 1), SUBSTRING(temp_text, close_pos + 1));
  END WHILE;
  
  -- 循环合并连续空格
  WHILE LOCATE('  ', temp_text) > 0 DO
    SET temp_text = REPLACE(temp_text, '  ', ' ');
  END WHILE;
  
  -- 去除首尾空格
  SET temp_text = TRIM(temp_text);
  
  RETURN temp_text;
END //
DELIMITER ;

调用方式:

SELECT clean_text(your_column) AS cleaned_text FROM your_table;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:45:48