嗨,如果以字母开头,我想在字符串后附加一个字母C. 如果它有任何标点符号,则用下划线替换_ 例如:5-2-2-1 ==> C5_2_2_1
我试过,但我无法替换多次出现的标点符号。我错过了一些简单的事情,我无法得到它。
SELECT REGEXP_REPLACE('9-1-1','^(\d)(-),'C\1_' ) FROM DUAL;
答案 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, '([-+.,;:'"!])', '_')