SQL 查询将中间数字更改为 XXX.例如:9744XXXXX3544


Select AccountNumber From Sample_table

以上是我的示例查询。

电流输出为9744123453544。

我怎么能做到9744XXXXX3544

你可以像这样使用STUFF

Select STUFF(AccountNumber,5,5,'XXXXX')  from yourTable

如果值长度是固定的,这将帮助你

DECLARE @String VARCHAR(200)
SET @String = '9744123453544'
SELECT STUFF(@String, 5, LEN(@String) - 8, REPLICATE('X', LEN(@String) - 8)) AS HideValue

输出

HideValue
---------
9744XXXXX3544

这可以使用 STUFF 函数以非常简单的方式执行。

DECLARE @accountNumber VARCHAR(50) 
SET @accountNumber = '9744123453544' 
SELECT Stuff(@accountNumber, 5, 5, 'XXXXX') 

由于这是固定的帐号长度。

为了清晰和可重用,我建议在UDF中执行此操作,但是如果您想在SQL中内联执行此操作,则可以执行以下操作:

SELECT SUBSTRING(AccountNumber, 1, 4) +
REPLICATE('X', LEN(AccountNumber) - 8) +
SUBSTRING(AccountNumber, LEN(AccountNumber) - 3, LEN(AccountNumber))
FROM Sample_Table

以下是作为 UDF 并具有不同配置的方法:

CREATE FUNCTION dbo.CensorString(@str VARCHAR(200), @show_left INT = 4, @show_right INT = 4)
RETURNS VARCHAR(200)
AS
BEGIN
DECLARE @ret VARCHAR(200) = '';
IF @show_left > 0
SET @ret = @ret + SUBSTRING(@str, 1, @show_left);
SET @ret = @ret + REPLICATE('X', LEN(@str) - @show_left - @show_right);
IF @show_right > 0
SET @ret = @ret + SUBSTRING(@str, LEN(@ret) + 1, LEN(@str));
RETURN @ret;
END
GO
SELECT dbo.CensorString('112233445566778899', 0, 4);
SELECT dbo.CensorString('112233445566778899', default, default);

输出:

XXXXXXXXXXXXXX8899  
1122XXXXXXXXXX8899

如果您使用的是SQL Server 2016+,请尝试使用动态数据屏蔽功能。(https://learn.microsoft.com/en-us/sql/relational-databases/security/dynamic-data-masking)。

相关内容

最新更新