原始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')
查詢結果