【发布时间】: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;
【问题讨论】:
您好,如果字符串以数字开头,我想将字母 C 附加到字符串中。 此外,如果它有任何标点符号,则用下划线_替换 例如:5-2-2-1 ==> C5_2_2_1
我试过了,但我无法替换多次出现的标点符号。我错过了一些简单的东西,我无法得到它。
SELECT REGEXP_REPLACE('9-1-1','^(\d)(-),'C\1_' ) FROM DUAL;
【问题讨论】:
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?
【讨论】:
试试这个:
select (case when substr(val, 1, 1) between '0' and '9' then 'C' else '' end) ||
regexp_replace(val, '([-+.,;:'"!])', '_')
【讨论】: