Oracle单SQL语句实现按位置替换字符串分隔符
单条SQL语句实现Oracle字符串分隔符替换需求
可以通过嵌套使用REGEXP_REPLACE结合正则正向预查,一次性满足两种格式的转换需求:
实现语句
SELECT REGEXP_REPLACE(REGEXP_REPLACE('a|b|c', '\|(?=[^|]+\|)', ','), '\|', '&') AS result FROM dual;
逻辑说明
- 内层
REGEXP_REPLACE:使用正则\|(?=[^|]+\|)匹配**后面仍存在分隔符|**的第一个|,将其替换为,。- 对于
a|b|c,会匹配第一个|,替换后得到a,b|c; - 对于
a|b,该正则无匹配项,字符串保持a|b不变。
- 对于
- 外层
REGEXP_REPLACE:将所有剩余的|替换为&。- 处理
a,b|c得到a,b&c; - 处理
a|b得到a&b。
- 处理
扩展测试
可以通过多值测试验证所有场景:
SELECT original_str, REGEXP_REPLACE(REGEXP_REPLACE(original_str, '\|(?=[^|]+\|)', ','), '\|', '&') AS converted_str FROM ( SELECT 'a|b|c' AS original_str FROM dual UNION ALL SELECT 'x|y' FROM dual UNION ALL SELECT 'no_separator' FROM dual );
执行结果:
| ORIGINAL_STR | CONVERTED_STR |
|---|---|
| a | b |
| x | y |
| no_separator | no_separator |
内容的提问来源于stack exchange,提问作者vineeth vp
相关产品推荐
相关产品推荐

