我想使用SQL屏蔽字符串的某些部分,例如,如果字符串是
'example test 156425648'
我只想从右到右屏蔽数字的前5个字符
'example test XXXXX5648'
遮罩永远是从右开始的。
我希望在选择查询本身中完成此掩码,请有人帮我进行查询。
答案 0 :(得分:3)
在SQL Server中,将stuff()
函数与patindex()
和replicate()
结合使用:
select stuff(str, patindex('%[0-9]%', str), 5, replicate('X', 5))
from (values ('example test 156425648')) v(str);
如果您知道数字在字符串的末尾,则仍然可以使用stuff()
:
select stuff(str, len(str) - 8, 5, replicate('X', 5))
from (values ('example test 156425648')) v(str);
从问题的表达方式来看,我没有理由认为数字是固定的。
答案 1 :(得分:2)
根据您的要求,该数字将始终为9位数字,并在字符串的末尾:
declare @value varchar(100) = 'example test 156425648';
select left(@value, len(@value) - 9) + 'XXXXX' + right(@value, 4)
将给出:
example test XXXXX5648
请参见demo。