一、问题
银行卡只保留前四位和后四位,给中间所有数字打*号,但是银行卡卡号长度不一样,如何实现?
二、思路
如何把银行卡前四位和后四位选出来,然后用*替换掉中间的数字
三、测试数据
四:解法
1.使用SUBSTR()和REPLACE()函数
函数基本用法:
SUBSTR()函数
作用:用来截取数据库某个字段中的一部分。
语法:substr(string,start,length)
string参数:必选。数据库中需要截取的字段。
start参数:必选。正数,从字符串指定位子开始截取;
负数,从字符串结尾指定位子开始截取;
0,在字符串中第一个位子开始截取。1,同理。(特殊)
length参数:可选。需要截取的长度。缺省,即截取到结束位置。
注意:若必选参数为空,那返回的结果也为空。
REPLACE ()
作用:用于替换字符串中的某一部分
语法:REPLACE ( string_expression , string_pattern , string_replacement )
string_expression参数: 要搜索的字符串表达式。string_expression 可以是字符或二进制数据类型。
string_pattern参数:是要查找的子字符串。string_pattern 可以是字符或二进制数据类型。string_pattern 不能是空字符串 ('')。
string_replacement 参数:替换字符串。string_replacement 可以是字符或二进制数据类型。
返回类型
如果其中的一个输入参数数据类型为 nvarchar,则返回 nvarchar;否则 REPLACE 返回 varchar。
如果任何一个参数为 NULL,则返回 NULL。
REPLACE(String,from_str,to_str) 即:将String中所有出现的from_str替换为to_str。
解法如下:
SELECT
name,
REPLACE(ID,SUBSTR(ID FROM 5 FOR (LENGTH(ID)-8)),REPEAT('*',(LENGTH(ID)-8))) AS encryption_ID
FROM bankcardnumber
2.使用SUBSTR(),REPEAT(),CONCAT()函数
CONCAT()函数
作用:将多个字符串连接成一个字符串。
语法:
concat(str1, str2,...)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
concat(str1, seperator,str2,seperator,...)
返回结果为连接参数产生的字符串并且有分隔符,如果有任何一个参数为null,则返回值为null。
REPEAT()函数
作用:把某字符串重复多次
语法:REPEAT(str,count)
返回由字符串str重复count次的字符串。 如果计数小于1,则返回一个空字符串。返回NULL如果str或count为NULL。
解法如下:
SELECT
name,
ID,
CONCAT(SUBSTR(ID FROM 1 FOR 4),REPEAT('*',(LENGTH(ID)-4)),SUBSTR(ID FROM (LENGTH(ID)-4+1) FOR 4)) AS encryption_ID
FROM bankcardnumber