【问题标题】:Removing all special characters using REGEXP_REPLACE in oracle在 oracle 中使用 REGEXP_REPLACE 删除所有特殊字符
【发布时间】:2020-04-25 23:17:32
【问题描述】:

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

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;  

【问题讨论】:

    标签: sql oracle oracle11g oracle12c


    【解决方案1】:

    使用Text Literal,例如

    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 必须是 相同的字符。

    【讨论】:

      【解决方案2】:

      我认为Â 字符未被替换的原因是因为您使用的特定排序规则将ÂA 视为相同的字符。一种可能的解决方法是在查询时强制进行区分这两个字符的排序规则:

      SELECT
          REGEXP_REPLACE(val, '[^0-9A-Za-z]', ' ')
      FROM yourTable
      COLLATE utf8_unicode_ci;
      

      【讨论】:

      • 我不认为排序规则是这里的问题,TO 喜欢转义单引号。
      猜你喜欢
      • 2015-12-09
      • 1970-01-01
      • 1970-01-01
      • 2015-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-22
      • 1970-01-01
      相关资源
      最近更新 更多