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

Oracle SQL REGEXP_REPLACE实现点号后按需添加空格的问题

解决正则替换问题:仅在点号后为字母/数字时添加空格

你的问题出在正则表达式的基础用法上——在正则语法里,.是匹配任意单个字符的通配符,所以你原来的语句会把每一个字符都替换成. ,完全偏离了需求方向。

要实现目标,我们需要精准匹配后面紧跟字母或数字的点号,再把这个点号替换成. ,其他点号保持不变。这里要用到正则的**正向预查(Positive Lookahead)**语法,它能帮我们判断点号后面的字符是否符合条件,且不会把后面的字符包含在匹配内容里。

针对不同数据库的正确SQL写法

MySQL 8.0+ / MariaDB

SELECT REGEXP_REPLACE(expCol, '\\.(?=[a-zA-Z0-9])', '. ') AS expCol
FROM expTable;
  • \\.:转义点号,因为原生点号是通配符,这里要匹配字面意义的.
  • (?=[a-zA-Z0-9]):正向预查,确保当前位置(点号之后)的字符是字母或数字
  • MySQL默认全局替换,无需额外参数

PostgreSQL

SELECT REGEXP_REPLACE(expCol, '\.(?=[a-zA-Z0-9])', '. ', 'g') AS expCol
FROM expTable;
  • 'g'参数表示全局替换(如果一行里有多个符合条件的点号,都会被处理)
  • PostgreSQL里正则转义只用单个反斜杠即可

Oracle

SELECT REGEXP_REPLACE(expCol, '\.(?=[a-zA-Z0-9])', '. ') AS expCol
FROM expTable;
  • Oracle的正则函数默认全局匹配,写法和PostgreSQL类似

验证结果

执行上述语句后,你的表数据会得到预期输出:

+--------+
|expCol |
+--------+
|abc. abc|
|bcd. 123|
|efg.@/. |
+--------+
  • 第一行点号后是字母a,符合条件,添加空格
  • 第二行点号后是数字1,符合条件,添加空格
  • 第三行的两个点号,第一个后是@、第二个后是字符串结尾,都不符合字母/数字的条件,所以保持原样

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:33:09