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