Oracle regexp_replace:不要替换第一个字符,替换其他字符

时间:2013-12-04 09:23:32

标签: sql regex oracle oracle11g

我正在编写一个sql,我正在使用regexp_replace函数。

我的目标是用' - '替换'|', '\'等字符。

我面临的问题是它取代了开头的'+'。

例如:

电话号码为:+49 |0| 941 78878544

我必须重新打造'|'用' - '。

我的代码是:SELECT regexp_replace(phone,'\D','-') FROM PHONE_TBL WHERE EMPLID = employee;

我得到的输出为:-49--0--941-78878544

此代码会替换space以及开头的'+'

我想要保留'+',如果它在开头,并且如果电话号码中有空格,那么也应该保留。

对于'+',我已经发现我应该匹配字符串的开头,然后,必须检查非数字数字,然后转义,但不能编码。

对于两者之间的空间,类似的方法。

对此有任何帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

如果要替换'\'和'|'的所有实例使用' - ',请使用以下内容:

SELECT REGEXP_REPLACE(phone,'[\|\]','-') 
FROM phone_tbl 
WHERE emplid = employee;

方括号定义了一组要匹配的字符。 '\ |'表示匹配管道字符; '\'表示匹配反斜杠字符。如果要替换反斜杠和管道以外的其他字符,请将它们添加到方括号中。