屏蔽帐号中的最后4位数字



我需要对一个有很多记录的表进行选择,以屏蔽帐号。

示例账号:12300012341234

输出结果应该看起来像12340001234XXXX

最后4位应该变成X。

到目前为止,我想出了这个

select SUBSTRING('XXXX', 0, 4 - len(RIGHT(AccNumber, 4))) + RIGHT(AccNumber, 4) from table

我错过什么了吗?

您也可以使用STUFF。它正是为这种类型的东西而设计的。我正在使用萨米发布的优秀样本数据。性能应该没有差异,但按键次数要少一点。:)另一个优点是,如果传入的帐户代码太短,它不会崩溃。它只会返回NULL。

declare @MyStrings TABLE (
STR VARCHAR(200)
);
INSERT INTO @MyStrings VALUES
('123400012341234'),
('123400012340000004321'),
('12340102');

select stuff(STR, len(STR) - 3, 4, 'xxxx')
from @MyStrings
SELECT 
LEFT(AcctNumber, LEN(AcctNumber)-4) + 'XXXX' 
FROM YourTable

或者,如果字符串长度是可变的,你会想避免它在短字符串上出错:

SELECT 
CASE WHEN LEN(AcctNumber) > 4
THEN LEFT(AcctNumber, LEN(AcctNumber)-4) + 'XXXX' 
ELSE 'XXXX'
END
FROM YourTable

或者,如果您非常确定帐号总是15个字符:

SELECT 
LEFT(AcctNumber, 11) + 'XXXX' 
FROM TABLE

下面是一个例子:

CREATE TABLE MyStrings (
STR VARCHAR(200)
);
INSERT INTO MyStrings VALUES
('123400012341234'),
('123400012340000004321'),
('12340102'),
('1');
SELECT CASE WHEN LEN(STR) >= 8 THEN SUBSTRING(STR, 1, LEN(STR)-4)+'XXXX' END AS Result
FROM MyStrings;

结果:

+-----------------------+
|        Result         |
+-----------------------+
| 12340001234XXXX       |
| 12340001234000000XXXX |
| 1234XXXX              |
| NULL                  |
+-----------------------+

尝试使用stuff函数,它更容易:

Select 
AcctNumber=STUFF ( AcctNumber, (LEN(AcctNumber)-3), 4 , 'XXXX' )
from Table1

希望它能帮助你:)

我在ORACLE SQL上使用了这个查询来查找预期的输出;

创建表acc_study(acc_no int不为null);插入acc_study值(1234 00012341234);

选择长度(Acc_no),rpad(rpad(Acc_no,11,''),15,'')作为Acc_study的输出;

输出结果-12340001234XXXX

最新更新