![](/img/trans.png)
[英]How to Insert '/' after 2nd and 4th char in varchar column of an Oracle table
[英]I need oracle regex to replace 2nd to 4th position characters to symbol
我有像94335251812
这样的号码,我想将第 2 到第 4 号 position 替换为符号。
例如
94335251812 -> 9___5251812
123456789 -> 1___56789
您希望将第二到第四个字符替换为下划线 ( _
)。
点( .
) 表示任何字符。 这意味着您可以使用点 map 任何值。 这就像数据库概念中的完全外部连接。 你可以加入任何角色。
例如,以下会将前 3 个字符替换为“xxx”。
select regexp_replace('1@#45', '...', 'xxx') from dual; -- 'xxx45'
您可以将量词重复为{number}
。
select regexp_replace('1@#45', '.{3}', 'xxx') from dual; -- 'xxx45'
但是你只需要找到第 2 到第 4 个字符。 所以你可以使用第 4 个参数,它是起始索引。
select regexp_replace('1@#45', '.{3}', 'xxx', 2) from dual; -- '1xxx5'
这很简单,但对我来说并不容易,因为我使用的所有编辑器都不支持替换起始索引。 (记事本++、VSCode、Visual Studio...)
所以我通过重复点( .
)找到所有字符。
-- .: 1st characther
-- .{3}: 2nd to 4th characters
-- .+: all characters to end of string
select regexp_replace('1@#45', '..{3}.+', 'xxx') from dual; -- 'xxx'
结果是错误的,因为我替换了整个字符串,所以我需要恢复原始值。
您可以使用组标记您的搜索作为(pattern1)(pattern2)
以在替换中引用。 您可以按索引将组引用为\1\2
。
以下结果相同,因为所有组都已恢复。
select regexp_replace('1@#45', '(.)(.{3})(.+)', '\1\2\3') from dual; -- 1@#45
现在您用点 ( .
) 映射了所有字符,并将要恢复的内容和要替换的内容划分为组。 您只需要将第二组替换为 3 _
。
select regexp_replace('1@#45', '(.)(.{3})(.+)', '\1___\3') from dual; -- 1___5
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=de84fbd3ff667a010b03958c52b849c6
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.