记录一个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')
查询结果