替换 CustomerID 字段中的个别数字 SQL 服务器
Replacing individual digits in a CustomerID field SQL Server
我有一些客户数据需要匿名化。我有由数字组成的 customerIds。
例如:
CustomerID
3937487
我需要将每个数字替换为一个替代数字,这应该足以满足我的要求。基于以下查找 table
我遇到的唯一问题是在字段上使用 REPLACE 函数时:
REPLACE(REPLACE(CustomerID,2,9),9,6)
这给了我
CustomerID
3637487
它将数字 2 交换为 9,然后将相同的 9 交换为 6。它只需要替换数字一次。
由于我要一次性更改数百万条记录,因此从性能角度来看,使用 temp tables 是不可能的。这可以在一个查询中递归地完成吗?
我想不出有任何方法可以在单个查询中完成此操作。如果我想这样做,我会创建一个类似
的函数
CREATE FUNCTION [dbo].[AnonymiseId]
(
@Id [int]
)
RETURNS [int]
AS
BEGIN
-- Declare the return variable here
DECLARE @ResultVar int;
DECLARE @substitutions nvarchar(10) = '7295380146';
DECLARE @stringId nvarchar(100) = CONVERT(nvarchar(100), @Id);
DECLARE @i int = 1
DECLARE @substituteStringId nvarchar(100) = '';
WHILE @i <= LEN(@stringID)
BEGIN
DECLARE @char nvarchar = SUBSTRING(@stringId, @i, 1);
DECLARE @charValue int = CONVERT(int, @char);
DECLARE @subsChar nvarchar = SUBSTRING(@substitutions, @charValue + 1, 1);
SET @substituteStringId = CONCAT(@substituteStringId, @subsChar);
SET @i = @i + 1
END
SET @ResultVar = CONVERT(int, @substituteStringId);
-- Return the result of the function
RETURN @ResultVar;
END
GO
然后在查询中使用它
SELECT dbo.AnonymiseId(CustomerID) FROM ???
我有一些客户数据需要匿名化。我有由数字组成的 customerIds。
例如:
CustomerID
3937487
我需要将每个数字替换为一个替代数字,这应该足以满足我的要求。基于以下查找 table
我遇到的唯一问题是在字段上使用 REPLACE 函数时:
REPLACE(REPLACE(CustomerID,2,9),9,6)
这给了我
CustomerID
3637487
它将数字 2 交换为 9,然后将相同的 9 交换为 6。它只需要替换数字一次。
由于我要一次性更改数百万条记录,因此从性能角度来看,使用 temp tables 是不可能的。这可以在一个查询中递归地完成吗?
我想不出有任何方法可以在单个查询中完成此操作。如果我想这样做,我会创建一个类似
的函数CREATE FUNCTION [dbo].[AnonymiseId]
(
@Id [int]
)
RETURNS [int]
AS
BEGIN
-- Declare the return variable here
DECLARE @ResultVar int;
DECLARE @substitutions nvarchar(10) = '7295380146';
DECLARE @stringId nvarchar(100) = CONVERT(nvarchar(100), @Id);
DECLARE @i int = 1
DECLARE @substituteStringId nvarchar(100) = '';
WHILE @i <= LEN(@stringID)
BEGIN
DECLARE @char nvarchar = SUBSTRING(@stringId, @i, 1);
DECLARE @charValue int = CONVERT(int, @char);
DECLARE @subsChar nvarchar = SUBSTRING(@substitutions, @charValue + 1, 1);
SET @substituteStringId = CONCAT(@substituteStringId, @subsChar);
SET @i = @i + 1
END
SET @ResultVar = CONVERT(int, @substituteStringId);
-- Return the result of the function
RETURN @ResultVar;
END
GO
然后在查询中使用它
SELECT dbo.AnonymiseId(CustomerID) FROM ???