我正在尝试为测试目的在SQL数据库中“混淆”数据。我有一个单独的表格里面有一个字段,我希望这个字段的值被替换为随机字符串,但是相同的字符串必须具有相同的值。例如:
Cat
Dog
Cat
Fish
Monkey
需替换为
YuW -- same
JiK
YuW -- same
IPoQ
KYiLwY
我不希望这个过程是可逆的(所以不能使用 ROT13 等方法)
编辑:我需要它保持相同的长度。这个数据库将用于性能测试,我希望使用真实的字符串大小。
我正在尝试为测试目的在SQL数据库中“混淆”数据。我有一个单独的表格里面有一个字段,我希望这个字段的值被替换为随机字符串,但是相同的字符串必须具有相同的值。例如:
Cat
Dog
Cat
Fish
Monkey
需替换为
YuW -- same
JiK
YuW -- same
IPoQ
KYiLwY
我不希望这个过程是可逆的(所以不能使用 ROT13 等方法)
编辑:我需要它保持相同的长度。这个数据库将用于性能测试,我希望使用真实的字符串大小。
您应该使用哈希算法:
SELECT HashBytes('MD5', yourcolumnname)
SELECT (SELECT SUBSTRING(HASHBYTES('MD5',[yourcolumnname]),0,len([yourcolumnname])))
checksum()
并选择前 个字符。select left(cast(checksum(name) as varchar(255)), 10)
B
是B
还是0
。 - Juan Carlos Oropezaselect HASHBYTES('MD5', 'Sample String to hash ') from x;
select HASHBYTES('SHA1', 'Sample String to hash ') from x;
select CHECKSUM('string') from x;
我很好奇...这个怎么样:
编辑:您可以使用此方法为每个不同的现有值找到“新值”...
CREATE VIEW Get_NewID
AS
SELECT NEWID() AS MyNewID
GO
CREATE FUNCTION dbo.RandomLetters(@Length INT)
RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @rslt VARCHAR(MAX);
WITH TwentySixNumbers AS
(
--a tally table
SELECT TOP 26 ROW_NUMBER() OVER(ORDER BY object_id) AS nmbr
,(SELECT MyNewID FROM Get_NewID) AS sort
FROM sys.objects
)
,TwentySixLetters AS
(
SELECT nmbr,sort,CHAR(nmbr+64) AS letter
FROM TwentySixNumbers
)
SELECT @rslt=
(
SELECT TOP (@Length) letter
FROM TwentySixLetters
ORDER BY sort
FOR XML PATH(''),TYPE
).value('.','varchar(max)');
RETURN @rslt;
END
GO
--Here you create 10 different strings of seven letters
--pass as length the length of your text
WITH TenNumbers AS
(
--a tally table
SELECT TOP 10 ROW_NUMBER() OVER(ORDER BY object_id) AS nmbr
FROM sys.objects
)
SELECT dbo.RandomLetters(7)
FROM TenNumbers;