記錄一個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')

查詢結果

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