Oracle REGEXP_REPLACE 字符串替换 'n'从 nn 位置开始的时间
我想替换“|”和 '_'。替换应该从第nn个字符开始并替换n次。例如,
ABC|1234|mno|p|q|r|456|XYZ|QRS|TUV ====> ABC|1234|mno|p_q_r|456|XYZ|QRS|TUV
在上面的示例中 nn=14 和 n=3
到目前为止,我已经尝试过,但没有得到预期的结果
SELECT REGEXP_REPLACE('ABC|1234|mno|p|q|r|456|XYZ', '[|]', '_',14) rep_str FROM DUAL
I want to replace '|' with '_'. The replacement should start from nnth character and replace n times. For e.g.
ABC|1234|mno|p|q|r|456|XYZ|QRS|TUV ====> ABC|1234|mno|p_q_r|456|XYZ|QRS|TUV
In above example nn=14 and n=3
So far, I've tried this but not getting the expected results
SELECT REGEXP_REPLACE('ABC|1234|mno|p|q|r|456|XYZ', '[|]', '_',14) rep_str FROM DUAL
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在您的简单示例中,指定两个事件更容易:
带有测试数据的完整示例: DBFiddle
或者,如果您使其更加可定制并更容易指定替换数量,您可以使用简单的具有如下循环的内联 pl/sql 函数: DBFiddle
In your simple example it's easier to specify both 2 occurences:
Full example with test data: DBFiddle
Or if you make it more customizable and specify number of replacement easier, you can use simple inline pl/sql function with a loop like this: DBFiddle
您可以使用普通的
substr
/instr
来完成此操作,但需要仔细处理边缘情况。提取您需要的零件并更换其中的所有管道。然后把所有东西放回去。db<>fiddle 此处
UPD :或者如果您要替换大小为
n
的子字符串从位置nnn
开始:db<>fiddle 此处
You can do it with plain
substr
/instr
, but need to process edge cases carefully. Extract the part you need and replace all pipes in it. Then put everything together back.db<>fiddle here
UPD: Or if you were about replacement in the substring of size
n
starting from positionnnn
:db<>fiddle here