SQL Server テーブル内の一部の文字列を「ランダム化」して、プリミティブ暗号化を行っています。
基本的にアルファベットと数字のすべての文字を取り、それを別の文字または数字に置き換える、約 35 回 (AZ,1-9) のネストされた SQL 置換関数があります。その例は
Replace(Replace(Replace('a', 'c'), 'b', 'a'), 'c', 'b')
置換関数は「abc」のような文字列を通過し、すべてを一度置換して「cab」で停止すると考えました。そうではありません!
一部の文字を再度変更したいようで、'abc'->'cab'->'ccb'
.
これは問題ありませんが、「aac」という別の文字列がある場合、文字列が重複し、元の文字列への追跡可能性が失われる可能性があります。
文字列を部分的に戻す REPLACE() を停止する方法を誰か説明できますか?
SELECT * INTO example_temp FROM example;
Update KAP_db.dbo.example_temp Set col1 = replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(
col1, 'A', 'N'),'B', 'O'), 'C', 'P'), 'D', 'Q'), 'E', 'R'), 'F', 'S'), 'G', 'T'),
'H', 'U'), 'I', 'V'), 'J', 'W'), 'K', 'X'), 'L', 'Y'), 'M', 'Z'), 'O', 'A'), 'P', 'B'),
'Q', 'C'), 'R', 'D'),'S', 'E'),'T', 'E'),'U', 'E'),'V', 'F'),'W', 'G'),'X', 'H'),
'Y', 'I'),'Z', 'J'), '1', '9'),'2','8'),'3','7'),'4','6'),'5','5'),'6','4'),'7','3'),
'8','2'),'9','1'),' ','');
上記の結果、「8EVHUAB」と「8EVHHAB」は両方とも「2DFEENA」を出力します
アップデート - - - - - - - - - - - - - - - - - - - - - - - - - ------------------
OK、コードをやり直しました。これまでのところ:
DECLARE @Input AS VarChar(1000)
DECLARE @i AS TinyInt
Declare @Substring AS VarChar(1000)
Declare @Prestring AS VarChar(1000)
Declare @Poststring AS VarChar(1000)
Select @Input='ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789'
SELECT @i = 1
Select @Substring ='na'
WHILE @i <= LEN(@Input) BEGIN
Select @Prestring = SUBSTRING(@Input,-1,@i)
Select @Poststring = SUBSTRING(@Input,@i+1,LEN(@Input))
SELECT @Substring = replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace
(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace(replace
(SUBSTRING(@Input,@i,1), 'A', 'N'),'B', 'O'), 'C', 'P'), 'D', 'Q'), 'E', 'R'), 'F', 'S'), 'G', 'T'), 'H', 'U'), 'I', 'V'), 'J', 'W'), 'K', 'X'), 'L', 'Y'), 'M', 'Z'), 'N', 'A'), '0', 'B'), 'P', 'C')
, 'Q', 'D'),'R', 'E'),'S', 'E'),'T', 'E'),'U', 'F'),'V', 'G'),'W', 'H'),'X', 'I'),'Y', 'J'), '1', '9'),'2','8'),'3','7'),'4','6'),'5','5'),'6','4'),'7','3'),'8','2'),'9','1'),' ','')
Select @Input = @Prestring + @Substring + @Poststring
SELECT @i = @i + 1
print 'END
'
END
ただし、これは正しく機能しません。コードは記述どおりに実行されません。何か提案はありますか?