使用 SQL 服务器时限制为 20 个字符的唯一 HASHID
Unique HASHID with 20 characters limit using SQL Server
代码有 20 个字符的限制,但必须是唯一的。为了使其独一无二,这些值的 3 部分组合将超过 20 个字符的限制,更像是 40 – 50 大小。所以想法是根据该字符串生成某种类型的唯一 ID,但不超过 20 个字符。
我正在探索 SQL 服务器 Hashbytes
函数的可能用途,该函数将所有内容放入哈希并使其更小(下面的示例)。
然而,所有旧的 16 bit/32 位散列函数已被 Microsoft 淘汰,新的更准确的散列函数大约有 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
代码有 20 个字符的限制,但必须是唯一的。为了使其独一无二,这些值的 3 部分组合将超过 20 个字符的限制,更像是 40 – 50 大小。所以想法是根据该字符串生成某种类型的唯一 ID,但不超过 20 个字符。
我正在探索 SQL 服务器 Hashbytes
函数的可能用途,该函数将所有内容放入哈希并使其更小(下面的示例)。
然而,所有旧的 16 bit/32 位散列函数已被 Microsoft 淘汰,新的更准确的散列函数大约有 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