【问题标题】:Oracle remove Name/Surname/Telephone and AddressOracle 删除姓名/姓氏/电话和地址
【发布时间】:2020-04-26 20:08:08
【问题描述】:

我有一个包含用户评论的 Oracle 表。我想屏蔽所有单词,例如姓名/姓氏/电话和地址

在 Oracle 中是否有一种简单的方法可以做到这一点?

例子:

"Hello, i'm Alex DURAND, my phone number is 0685987525"
should be transform in
"Hello, i'm XXXX XXXXXX, my phone number is XXXXXXXXXX"

非常感谢

【问题讨论】:

  • 评论的格式总是一样吗?如果不是,你怎么知道“Alex Durand”(应该被屏蔽)与“他的名字”(不应该被屏蔽)不同?另外,你怎么知道“09012020”是电话号码而不是今天的日期?很快 - 我们需要规则

标签: sql regex oracle regexp-replace regexp-substr


【解决方案1】:

当任务是只删除单词时,regexp_replace 在这里会有所帮助

select regexp_replace(lower(user_comment), '(surname|name|telephone|address)', '') replace_regexp
  from tab1

【讨论】:

    【解决方案2】:
    1. 通过'([[:digit:]])'模式使用regexp_replace()函数屏蔽电话号码

    2. 使用regexp_substr()函数通过'(i''m )(.*?)[^,]+'模式提取以i'm开头的部分

    3. 通过'[^ ]+'regexp_substr()函数从第二步导出的字符串中提取姓名和姓氏

    4. 在最后一步通过regexp_replace()replace()函数一起连续使用非空白字符匹配

      with t2 as
      (
       select regexp_replace( str, '([[:digit:]])', 'X') as str,
              regexp_substr(str,'(I''m )(.*?)[^,]+',1,1,'i') as str2       
         from t --> your original table
      ), t3 as
      (
       select regexp_substr(str2,'[^ ]+',1,2) as name,
              regexp_substr(str2,'[^ ]+',1,3) as surname,
              t2.*
         from t2
       )
      select replace(
                     replace( str, name, regexp_replace(name,'(*\S)','X') )
                    ,surname, regexp_replace(surname,'(*\S)','X') )
             as "Result String"        
        from t3
      

    str 列中每个值的格式假定在整个表格中是固定的。

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多