使用 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