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

SQL中如何替换所有#后的首个空格?解决regexp_replace单次替换问题

解决方案

问题核心是你需要全局替换所有符合规则的匹配项,默认的REGEXP_REPLACE通常只替换第一个匹配,所以要添加全局替换的参数,不同数据库的写法略有区别:

正则规则说明

我们要匹配的模式是:# 后跟一段非空格字符(目标单词),再跟一个空格。用正则表示为 #(\S+) ,其中:

  • \S+:匹配一个或多个非空格字符(捕获为分组1)
  • 末尾的空格:就是需要替换的目标

替换后的内容为 #\1#,即保留#和捕获的单词,把空格替换成#。


1. PostgreSQL / MySQL 8.0+

直接在函数末尾加 'g' 标志表示全局替换:

SELECT REGEXP_REPLACE(column, '#(\S+) ', '#\1#', 'g') AS modified_column
FROM your_table;

2. MySQL 5.x

MySQL 5.x的REGEXP_REPLACE不支持'g'标志,需要用第4个参数指定替换次数为0(表示所有匹配):

SELECT REGEXP_REPLACE(column, '#([^ ]+) ', '#\\1#', 1, 0) AS modified_column
FROM your_table;

(注:这里用[^ ]+代替\S+,效果一致,均匹配非空格字符)

3. Oracle

Oracle的REGEXP_REPLACE通过第4个参数指定0实现全局替换:

SELECT REGEXP_REPLACE(column, '#(\S+) ', '#\1#', 1, 0) AS modified_column
FROM your_table;

执行以上语句后,就能得到你期望的输出:

---------------------------------
| modified_column               |
---------------------------------
| abc def #ghi#jkl mno #pqr#stu |
---------------------------------

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 02:27:42