Oracle SQL如何用instr/substr/replace替换字符串第三个相同字符为*
Oracle SQL 指定次数字符替换实现(仅用instr/substr/replace)
需求边界
- 待处理示例字符串:
'abcafgadf' - 替换规则:将字符串中第三次出现的字符
'a'替换为'*' - 实现限制:仅可使用
instr、substr、replace三个Oracle内置函数,不可使用正则替换、其他字符处理类函数
实现思路
- 用
instr函数定位目标字符第三次出现的索引位置:instr(字符串, 待查找字符, 查找起始位置, 匹配次数),针对示例字符串该函数返回值为7,即第三次'a'出现在第7位(Oracle字符串索引从1开始计数) - 用
substr函数把原字符串拆为三个独立部分:第三次出现'a'之前的子串、位于第三次匹配位置的'a'本身、'a'之后的剩余子串 - 用
replace函数把拆分出来的单个目标'a'替换为'*',最后将三部分拼接即可得到结果
可直接运行的查询语句
SELECT substr('abcafgadf', 1, instr('abcafgadf', 'a', 1, 3) - 1) || replace(substr('abcafgadf', instr('abcafgadf', 'a', 1, 3), 1), 'a', '*') || substr('abcafgadf', instr('abcafgadf', 'a', 1, 3) + 1) AS replaced_result FROM dual;
结果说明
- 上述查询返回值为
abcafg*df,符合预期替换效果 - 写法中
||是Oracle原生字符串连接运算符,不属于内置函数范畴,完全满足题目限制要求 - 如果需要调整匹配次数、待替换字符,只需修改
instr的第四个参数(匹配序号)、第二个参数(待查找字符)以及replace的对应匹配参数即可复用逻辑 - 若原字符串中目标字符的出现次数小于指定次数,
instr会返回0,最终结果会返回空,如有兼容需求可在现有逻辑基础上自行扩展判断
内容的提问来源于stack exchange,提问作者Cajitin Rodrigues
相关产品推荐
相关产品推荐

