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;