代码有20个字符的限制,但它必须是唯一的。为了使其独一无二,有3个部分,这些值的组合将超过20个字符的限制,更像是40-50个大小。因此,我们的想法是基于该字符串生成某种类型的唯一ID,但不超过20个字符。
我正在探索SQL ServerHashbytes
函数的可能用途,该函数将所有内容放入哈希中并使其更小(下面的示例(。
然而,所有旧的16位/32位散列函数都已被微软退役,而更准确的新函数将有大约30-40个字符。这违背了目的。
有什么想法吗?
只是一个想法。。。
打开选项是将hashbytes()
转换为bigint
。
示例
Declare @Table table (Col1 varchar(25),Col2 varchar(25),Col3 int)
Insert into @Table values
('V5H 3K3','AAA',25),
('V6L 4L4','VVV',16),
('V4E 5L2','CCC',25),
('V5H 3K3','AAA',27)
Select *
,UniID = left(abs(convert(bigint,HashBytes('MD5', concat(col1,col2,col3)))),20)
From @Table
结果
Col1 Col2 Col3 UniID
V5H 3K3 AAA 25 8561734070678522554
V6L 4L4 VVV 16 2225152452607129855
V4E 5L2 CCC 25 5842957356638096832
V5H 3K3 AAA 27 1688308399631225138