1.情景展示
返回服務器的身份證號需要進行加密:只保留前4位和后3位,中間使用*代替,如何實現?
2.場景分析
需要用到的函數有:IFNULL(),IF(),LENGTH(),REPLACE(),SUBSTR(),這里重點介紹一下REPLACE()和SUBSTR()。
REPLACE(str,from_str,to_str)
介紹:將字符串中部分字符串替換指定的字符串,並返回替換后的整個字符串;
SUBSTR(str FROM pos FOR len)
介紹:從字符串中指定位置開始截取,並截取指定長度;這個函數的用法和Oracle是不一樣的。
這里需要注意的是:
不同於Java,pos的最小值是1,而不是0,並且將會從pos的位置進行截取(包含pos對應的值)。
另外,pos的值可以是負數,即:從后往前查,起始值為-1。
3.解決方案
SELECT IFNULL( IF ( t.PAYERPARTYTYPE = 1, IF ( LENGTH( T.PAYERPARTYCODE ) = 18, REPLACE ( T.PAYERPARTYCODE, SUBSTR( T.PAYERPARTYCODE FROM 5 FOR 11 ), '***********' ), REPLACE ( T.PAYERPARTYCODE, SUBSTR( T.PAYERPARTYCODE FROM 5 FOR 8 ), '********' )), T.PAYERPARTYCODE -- 當PAYERPARTYTYPE不等於1時,不對PAYERPARTYCODE做處理 ), '' -- PAYERPARTYCODE為null時,將顯示空 ) PAYERPARTYCODE, t.PAYERPARTYTYPE FROM `cz_fet_main_mz` t WHERE t.PAYERPARTYCODE IS NOT NULL LIMIT 10;