负号在计算的校验和值中表示什么?



我正在使用MS SQL中的CHECKSUM((函数计算哈希值。为什么有些计算值有正号,有些有负号?

SELECT CommodityName, CHECKSUM(CommodityName) FROM Table1

结果:

CommodityName        Checksum
BuildingSupplies    -1674787472
Cutting Tools        1343439447
Electrical           1703618888
Filtration          -1653028371
PPE                 -2086698034
Spare Parts          1752220254
Welding             -178487827

这是对这个老问题的间接回答,但如果有人来到这里寻找一种获取始终为正数的方法(例如,保存十六进制表示形式(,请尝试将 2,147,483,648 添加到结果中,得到介于 0 和 4,294,967,295 之间的值。

必须投射到比金特:

DECLARE @k bigint = CAST(CHECKSUM(…) As bigint) + 2147483648;

评论太长了——尽管它不是问题的直接答案。我正在发帖,因为您确实声明您正在计算哈希值。

您可能会对此感兴趣,因为您可能会将此值与哈希后的另一个值进行比较。

具体说来。。。来自 MSDN

CHECKSUM

满足哈希函数的属性:已应用 CHECKSUM 在任意两个表达式列表上返回相同的值,如果 两个列表的相应元素具有相同的类型,并且 使用等于 (=( 运算符进行比较时相等。为此 定义,则考虑指定类型的空值进行比较 平等。如果表达式列表中的某个值发生更改,则列表的校验和通常也会更改。但是,校验和不会更改的可能性很小。

因此,您可能希望使用 HAYSHBYTES 代替

最新更新