首页 > 解决方案 > 在 oracle 中使用 REGEXP_REPLACE 删除所有特殊字符

问题描述

我可以删除所有特殊字符,如下所示:

SELECT REGEXP_REPLACE('91D5 ZBA DISCONNECTION  https://mail.com/owa/#path=/mailÂ]*Debit Bank Ctry next Business Day is 06-Jan-2020', '[^0-9A-Za-z]', ' ')  
FROM dual;

输出 :

91D5 ZBA DISCONNECTION  https   mail tcs com owa  path  mail   Debit Bank Ctry next Business Day is 06 Jan 2020 

但是,如果我的描述中有任何单个反逗号,如下所示,如果失败,我如何使用 REGEXP_REPLACE 函数转义单个反逗号序列:

SELECT REGEXP_REPLACE('91D5 ZBA DISCONNECTION  https://mail.com/owa/#path=/''mailÂ]'*Debit Bank Ctry next Business Day is 06-Jan-2020', '[^0-9A-Za-z]', ' ')  
FROM dual;  

标签: sqloracleoracle11goracle12c

解决方案


使用文本字面量,例如

SELECT REGEXP_REPLACE(q'#91D5 ZBA DISCONNECTION  https://mail.com/owa/#path=/''mailÂ]'*Debit Bank Ctry next Business Day is 06-Jan-2020#', '[^0-9A-Za-z]', ' ')  
FROM dual;  

quote_delimiter是除空格、制表符和回车之外的任何单字节或多字节字符。quote_delimiter可以是单引号。但是,如果quote_delimiter出现在文本文字本身中,请确保它后面没有紧跟单引号。

如果开始的quote_delimiter是[、{、< 或() 之一,那么结束的quote_delimiter必须是对应的]、}、> 或)。在所有其他情况下,开始和结束quote_delimiter必须是相同的字符。


推荐阅读