MySQL 替換和擷取指定位置字串
阿新 • • 發佈:2021-07-14
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;
寫在最後
哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!