在Oracle数据库的实际使用中,处理字符串时经常需要去掉其中的点号,比如处理用户上传的文件名、清洗业务数据中的特殊符号等场景都会用到这类操作。不同的需求对应不同的实现方式,下面详细介绍几种常用的方法。

使用REPLACE函数去掉所有点号
REPLACE是Oracle中最基础的字符串替换函数,适合去掉字符串中所有的点号,不管点号出现在什么位置。它的语法是REPLACE(原字符串, 要替换的字符, 替换后的字符),如果要去掉点号,就把替换后的字符设为空字符串。
示例代码如下:
-- 去掉字符串中所有点号
SELECT REPLACE('192.168.1.1', '.', '') AS result FROM DUAL;
-- 输出结果:19216811
-- 处理带中文的字符串
SELECT REPLACE('测试.数据.清洗', '.', '') AS result FROM DUAL;
-- 输出结果:测试数据清洗
这种方法的优点是逻辑简单,执行效率高,缺点是无法灵活控制只去掉特定位置的点号,只能全量替换。
使用REGEXP_REPLACE函数实现更灵活的点号去除
如果需要去掉特定规则的点号,比如只去掉开头的点号、结尾的点号,或者去掉连续多个点号只保留一个,就可以使用REGEXP_REPLACE函数,它支持正则表达式匹配,能实现更复杂的替换逻辑。
去掉开头的点号
正则表达式中^表示字符串开头,匹配开头的点号替换为空即可:
SELECT REGEXP_REPLACE('.abc.def', '^.', '') AS result FROM DUAL;
-- 输出结果:abc.def
去掉结尾的点号
正则表达式中$表示字符串结尾,匹配结尾的点号替换为空:
SELECT REGEXP_REPLACE('abc.def.', '.$', '') AS result FROM DUAL;
-- 输出结果:abc.def
去掉连续多个点号只保留一个
使用正则匹配一个或多个连续的点号,替换为单个点号:
SELECT REGEXP_REPLACE('a..b...c', '.+', '.') AS result FROM DUAL;
-- 输出结果:a.b.c
两种方法的适用场景对比
可以通过下面的表格快速判断该使用哪种方法:
| 需求场景 | 推荐方法 | 优势 |
|---|---|---|
| 去掉字符串中所有点号 | REPLACE函数 | 语法简单,执行效率高 |
| 去掉特定位置的点号 | REGEXP_REPLACE函数 | 支持正则匹配,灵活度高 |
| 处理复杂规则的点号替换 | REGEXP_REPLACE函数 | 可适配多种自定义规则 |
注意事项
- 如果原字符串为NULL,两个函数的返回结果都为NULL,使用前可以先做非空判断。
- REGEXP_REPLACE的正则表达式需要根据实际需求调整,避免误匹配其他字符,比如点号在正则中是特殊字符,匹配字面点号需要加转义符。
- 处理大量数据时,REPLACE函数的性能优于REGEXP_REPLACE,优先选择更简单的函数实现需求。
实际开发中可以根据具体的业务需求选择合适的方法,两种函数结合使用可以覆盖绝大多数去掉字符串点号的场景。
Oracle字符串处理去掉点号REGEXP_REPLACEREPLACE修改时间:2026-07-19 22:39:18