Oracle Regexp_replace 多次出现

Posted

技术标签:

【中文标题】Oracle Regexp_replace 多次出现【英文标题】:Oracle Regexp_replace multiple occurrence 【发布时间】:2014-12-02 22:27:57 【问题描述】:

您好,如果字符串以数字开头,我想将字母 C 附加到字符串中。 此外,如果它有任何标点符号,则用下划线_替换 例如:5-2-2-1 ==> C5_2_2_1

我试过了,但我无法替换多次出现的标点符号。我错过了一些简单的东西,我无法得到它。

SELECT  REGEXP_REPLACE('9-1-1','^(\d)(-),'C\1_' ) FROM DUAL;

【问题讨论】:

【参考方案1】:
SELECT case when REGEXP_LIKE('9-1-1','^[[:digit:]]') then 'C' END 
       || REGEXP_REPLACE('9-1-1', '[[:punct:]]', '_')
FROM DUAL;

[:digit:] 任意数字[:punct:] 标点符号

如果您有很多具有不同值的行,请尽量避免使用正则表达式:

SELECT case when substr('9-1-1',1,1) between '0' and '9' then 'C' end
       || translate('9-1-1', ',.!-', '_')
FROM DUAL;

在这里查看例如:Performance of regexp_replace vs translate in Oracle?

【讨论】:

非常感谢它有效!我只是试图最小化多个功能,因为我将扫描数百万行 @Raj A 我添加了更多信息。我不知道数百万行 非常感谢您的努力和链接!!【参考方案2】:

试试这个:

select (case when substr(val, 1, 1) between '0' and '9' then 'C' else '' end) ||
       regexp_replace(val, '([-+.,;:'"!])', '_')

【讨论】:

非常感谢您的快速回复!!,只是出于好奇,如果有办法在一次正则表达式函数中做到这一点 @RajA 。 . .我不认为有一种方法可以用一个函数来做到这一点。 ..嗯,我在想,如果我们能捕捉到不止一次出现的角色..但没关系,我会用这个..再次感谢

以上是关于Oracle Regexp_replace 多次出现的主要内容,如果未能解决你的问题,请参考以下文章

Regexp_Replace 在 Oracle 中多次出现具有相同替换次数的字符

如何在 Oracle 中使用 REGEXP_REPLACE 删除单词

Regexp_replace :从 Oracle 中的“+”分隔字符串中删除重复项 [重复]

将 Oracle Regexp_replace 函数转换为 Netezza

oracle 的 regexp_replace 替换 https 不起作用

试图了解oracle REGEXP_REPLACE如何工作