记录一个mysql查询时用Replace替换手机号脱敏的问题

原始sql
select phone,Replace(phone,SUBSTR(phone,4,4),'****') from users
where phone in( '15115111641','17395081916','15391826880','13576717250')

查询结果

 

 原始数据有好几百条,但是只有这一条数据会出现这样的结果

 

开始排查问题,修改sql,把替换的位置从4,4改成了4,3

select phone,Replace(phone,SUBSTR(phone,4,3),'****') from users
where phone in( '15115111641','17395081916','15391826880','13576717250')

查询结果

 

 

把查询语句做下修改

SELECT phone,SUBSTR(phone,4,4) AS '需要被替换的',REPLACE(phone,SUBSTR(phone,4,4),'****') AS '结果' FROM users
WHERE phone in( '15115111641','17395081916','15391826880','13576717250')

查询结果

 

 

大概发现问题了,

因为字段中的重复数据导致的,

比如4,4要替换的字符串是1511,所以第一次查询,前面四位就符合条件,所以替换了前面4位

4,3要替换的字符串是151,第二次查询,因为前面六位数是151151,替换两次,这就导致前面6位都是*

 

正确查询姿势

select phone,CONCAT(LEFT(phone,3),'****',RIGHT(phone ,4)) from users
where phone in( '15115111641','17395081916','15391826880','13576717250')

查询结果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章