在 Oracle 数据库开发中,字符串替换是高频操作,尤其在数据清洗、报表生成等场景,而 replace 函数常用于把字符串中的某个子串全部替换成新内容。
语法
REPLACE(源字符串, 要查找的子串, [替换成什么])
参数说明:
参数 | 说明 | 是否必填 |
|---|---|---|
源字符串 | 被处理的字段或字面量 | ✅ 必填 |
要查找的子串 | 要被替换掉的固定字符串(区分大小写) | ✅ 必填 |
替换成什么 | 替换后的内容,不写则默认为空字符串 '' | ❌ 可选 |
注意:REPLACE 不支持通配符、不支持正则,只能匹配"一模一样的固定子串"。
执行逻辑
1、从源字符串中从左到右扫描,把所有出现的"要查找的子串"全部替换掉
2、不是只替换第一个,是全部替换
3、如果找不到目标子串,原样返回,不会报错
示例
1、替换固定字符
select replace('2026年08月14日', '年', '') from dual;
-- 结果:202608月14日
2、嵌套使用
select replace(replace(replace('2026年08月14日','年',''),'月',''),'日','') from dual;
-- 结果:20260814
3、省略第三个参数 = 删除
select replace('Hello World', 'l') from dual;
-- 结果:Heo Word
4、替换成别的字符
select replace('2026-08-14', '-', '/') from dual;
-- 结果:2026/08/14
5、找不到目标,原样返回
SELECT REPLACE('20260814', '年', '') FROM dual;
-- 结果:20260814(不报错)
典型使用场景
1、去掉固定分隔符(- / 年 月 日 T 等)
2、批量把某个固定字符改成另一个(如把 'N/A' 改成 NULL)
3、数据清洗中格式高度统一的场景
注意事项
❌ 不能用通配符(%、* 都不认)
❌ 不能匹配"一类字符"(比如"所有非数字")
❌ 大小写敏感:REPLACE('AbC','abc','x') → AbC(不动)
THE END









暂无评论内容