Oracle regexp_replace 字母数字

Oracle regexp_replace numbers for letters

我认为这应该很简单,但除了嵌套 regexp_replace,我似乎想不出其他方法来做到这一点。我想用相应的字母替换每个数字,例如:

regexp_replace(regexp_replace(regexp_replace('147','1','A'),'4','D'),'7','G')

结果:

ADG

但使用这样的列表运算符

regexp_replace('12345','[1234567890]','[ABCDEFGHIJ]')

当然我得到的不是 ADG

[ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ]

为此您不需要正则表达式;您需要翻译功能:

select translate('147', '1234567890', 'ABCDEFGHIJ') as translated from dual;

TRANSLATED
-------------
ADG

REGEXP_REPLACE 不容易做到这一点。

正则表达式并没有真正的能力根据匹配的内容来决定替换什么;它通常只是为了使 a 匹配,剩下的由您使用的任何编程语言决定。您也许可以用 Python 之类的方式来解决这个问题,但正如另一个答案中指出的那样,对于 Oracle,REGEXP_REPLACE 是不适合这项工作的工具。