SQL案例学习-保护个人信息

姓名、身份证号以及银行卡号等属于个人敏感信息。为了保护个人隐私,我们在前端界面显示时可能需要将这些信息中的部分内容进行隐藏,也就是显示为星号(*)。

以医院排队叫号系统为例,屏幕上通常会隐藏患者的姓氏(对于两个字的姓名)或者名字中的倒数第2个字(对于三个或更多字的姓名),例如“*三”或者“李*亮”。


姓名处理

对姓名字段进行隐藏处理,显示规则:

a.姓名为2个字符的,隐藏姓,只显示名。例如 '张三' 处理后为 '*三'

b.姓名为3个字符的,隐藏中间一个字符。例如 '阿凡提' 处理后为 '阿*提'

c.姓名为4个字符及以上的,隐藏最后两个字符。例如 '尼格买提' 处理后为 '尼格**'

实现SQL:

SELECT t.emp_name AS "原始值",LENGTH(t.emp_name) "字符个数",
  CASE LENGTH(t.emp_name) 
    WHEN 2 THEN '*'||SUBSTR(t.emp_name,2,1)
    WHEN 3 THEN SUBSTR(t.emp_name,1,1)||'*'||SUBSTR(t.emp_name,3,1)
    ELSE SUBSTR(t.emp_name,1,LENGTH(t.emp_name) -2)||'**' 
  END AS "隐藏后值"
FROM employee t

执行结果:

SQL分析:

LENGTH(str)函数,返回字符串str包含的字符数量。

SUBSTR(str,n,m)函数,发返回从位置n开始的m个字符。

手机号码处理

对手机进行隐藏处理,显示规则:

11位的手机号码,中间四位隐藏,其余正常显示。

实现SQL:

SELECT t.mobile_phone AS "隐藏之前",
SUBSTR(t.mobile_phone,1,3) ||'****' || SUBSTR(t.mobile_phone,8,4) AS "隐藏之后"
FROM emp_contact t

执行结果:

SQL分析:

SUBSTR使用两次,分别获取到前3位和后4位,中间用星号代替。

身份证号码处理

对身份证号码进行隐藏处理,显示规则:

18位的身份证号码,中间年月日的8位隐藏,其余正常显示。

实现SQL:

SELECT t.id_card AS "隐藏之前",
SUBSTR(t.id_card,1,6) ||'********' || SUBSTR(t.id_card,15,4) AS "隐藏之后"
FROM emp_contact t

执行结果:

SQL分析:

SUBSTR使用两次,分别获取到前6位和后4位,中间用星号代替。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值