【问题标题】:Remove special characters except Hyphen and Space in Oracle String Data删除 Oracle 字符串数据中除连字符和空格外的特殊字符
【发布时间】:2019-04-25 23:23:54
【问题描述】:

我需要使用 Reg_replace 函数删除 Oracle 字符串数据中除连字符和空格之外的所有特殊字符。请帮助。例如:

输入-> My Name is #name1 输出 -> My Name is name1

输入-> this is my add-ress#" 输出-> this is my add-ress

输入->can we remov-e this'; 输出->can we remov-e this

【问题讨论】:

  • 您可以使用正则表达式,但您需要准确定义要删除的内容 - 或者更简单地说,您要保留的内容。例如所有字母数字字符加上破折号和空格?句号和逗号呢?等
  • 需要多快? (这取决于两件事:必须处理多少数据,以及多久处理一次。)正则表达式解决方案易于编写或维护。或者,您可以使用更快的函数translate 编写解决方案,但它会更丑。
  • @Alex:是的,我想保留所有字母数字加破折号和空格。其他所有内容都需要删除(甚至逗号也需要删除)。
  • @mathguy:大约 10 万条记录。是的,我正在尝试使用 reg_exp 函数 reg_replace 但无法找出确切的语法。

标签: sql regex oracle formatting


【解决方案1】:

您可以使用[^[:alnum:] -] 作为正则表达式来匹配您要替换的值。

Oracle 设置

CREATE TABLE test_data( value ) AS
  SELECT 'this is my add-ress#\' FROM DUAL UNION ALL
  SELECT 'My Name is #name1' FROM DUAL UNION ALL
  SELECT 'can we remov-e this' FROM DUAL;

查询

SELECT value,
       REGEXP_REPLACE( value, '[^[:alnum:] -]', NULL ) AS replaced_value
FROM   test_data

输出

价值 | REPLACED_VALUE :-------------------- | :----------------- 这是我的地址#\ |这是我的地址 我的名字是#name1 |我的名字是name1 我们可以删除-e 这个吗?我们可以删除这个吗

db小提琴here

【讨论】:

    【解决方案2】:

    你可以使用下面的

    with t(str) as
    (
     select 'this is my add-ress#&%! : 198' from dual
    )
    select regexp_replace(str,'[^-0-9A-Za-z ]','') as "Result String"
      from t;
    
    Result String
    -----------------------
    this is my add-ress  198
    

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2021-04-23
    • 2021-10-16
    • 2014-08-17
    • 1970-01-01
    • 2020-07-29
    • 2011-09-27
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多