【问题标题】:Oracle regexp_replace numbers for lettersOracle regexp_replace 字母数字
【发布时间】:2020-02-08 04:54:42
【问题描述】:

我认为这应该很简单,但除了嵌套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]

【问题讨论】:

  • 我们怎么知道 147 代表第一个、第四个和第七个字母而不是 - 例如 - 第十四和第七个?
  • 您将需要嵌套的 regexp_replace() 调用。

标签: regex oracle regexp-replace


【解决方案1】:

你不需要正则表达式;你需要翻译功能:

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

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

【讨论】:

    【解决方案2】:

    REGEXP_REPLACE 无法轻松做到这一点。

    正则表达式实际上并没有权力根据匹配的内容来决定替换什么;它通常只是为了使 a 匹配,而其余的则取决于您使用的任何编程语言。您可能可以在 Python 之类的东西中使用它,但正如在另一个答案中指出的那样,对于 Oracle,REGEXP_REPLACE 是适合这项工作的错误工具。

    【讨论】:

      猜你喜欢
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2015-03-12
      • 2021-12-29
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多