Oracle Regexp_replace多次出现

时间:2014-12-02 22:27:58

标签: sql database oracle

嗨,如果以字母开头,我想在字符串后附加一个字母C. 如果它有任何标点符号,则用下划线替换_ 例如:5-2-2-1 ==> C5_2_2_1

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

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

2 个答案:

答案 0 :(得分:2)

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?

答案 1 :(得分:1)

试试这个:

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