zoukankan      html  css  js  c++  java
  • Oracle学习笔记:使用replace、regexp_replace实现字符替换、姓名脱敏

      在数据库中难免会遇到需要对数据进行脱敏的操作,无论是姓名,还是身份证号。

      最近遇到一个需求,需要对姓名进行脱敏:

    • 姓名长度为2,替换为姓+*;
    • 姓名长度为3,替换中间字符为*;
    • 姓名长度为4,替换第3个字符为*;

      经过一番搜索之后,最终找到了3种方式的实现,具体如下。

    一、先查找,再替换

    select replace('陈宏宏',substr('陈宏宏',2,1),'*') as name from dual;

    注意:此种方法通过对第2个字符进行替换,如果名字为叠名,则会发生上述误替换情况;

    二、拼接

    select substr('陈宏宏',1,1)||'*'||substr('陈宏宏',3,1) as name from dual;

    三、使用regexp_replace进行精准替换

    select regexp_replace('陈宏宏','(.)','*',2,1) as name from dual;

    注意:regexp_replace支持使用正则表达式对字符串进行替换,该语句解释为从第2个字符开始,取任意1个字符,替换为*;

    四、完整的替换代码 

    create table temp_cwh_002 as
    select a.acc_nbr,
           a.act_city,
           a.city_name,a.number1,
           a.number2,
           case when length(a.cust_name) = 2 then regexp_replace(cust_name,'(.)','*',2,1)
                when length(a.cust_name) = 3 then regexp_replace(cust_name,'(.)','*',2,1)
                when length(a.cust_name) = 4 then regexp_replace(cust_name,'(.)','*',3,1)
           else cust_name end cust_name,
           a.acc_nbr2,
           a.param_value
    from temp_cwh_001 a
    where length(a.cust_name) <= 4

    END 2019-01-02 16:44:13 

  • 相关阅读:
    dev c++ 使用
    PAT A1012 The Best Rank (25分) [排序]
    算法笔记-排序算法
    PAT A1081 Rational Sum (20) [分数的四则运算]
    PAT A1015 Reversible Primes (20分) [素数 质数 进制转换]
    PAT A1078 Hashing (25) [⼆次⽅探查法 素数 质数]
    PAT A1058 A+B in Hogwarts (20)[进制转换]
    PAT 1027 Colors in Mars (20分)
    将博客搬至CSDN
    windows环境下面配置pip环境变量
  • 原文地址:https://www.cnblogs.com/hider/p/10209321.html
Copyright © 2011-2022 走看看