我在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
答案 0 :(得分:1)
评论太长了 - 虽然这不是问题的直接答案。我发帖是因为你说你正在计算哈希值。
This may be of interest to you,因为您可能会在哈希值之后将此值与另一个值进行比较。
具体来说......来自MSDN
CHECKSUM满足散列函数的属性:应用了CHECKSUM 在任何两个表达式列表中返回相同的值,如果 两个列表的相应元素具有相同的类型 使用equals(=)运算符进行比较时相等。为了这 定义,指定类型的空值被认为是比较 平等的。如果表达式列表中的某个值发生更改,则 列表的校验和通常也会发生变化。但是,有一个小 校验和不会改变的可能性。
因此,您可能希望使用HAYSHBYTES代替
答案 1 :(得分:0)
这是对这个老问题的间接回答,但如果有人来到这里寻找一种获得始终为正数的方法(例如,保存十六进制表示),请尝试将 2,147,483,648 添加到结果中,获得介于0 和 4,294,967,295。
强制转换为 bigint 是必要的:
foo(data, just_msg = TRUE)
No issues in 'Bitc_Yng_Cmrn' detected.
No issues in 'Dlsk_Krlr' detected.
No issues in 'Ev_Hart_StngKras' detected.
No issues in 'Fazio' detected.
No issues in 'Harts_Evans' detected.
No issues in 'Hartshorn' detected.
No issues in 'Karim_Nas.' detected.
No issues in 'Munoz' detected.
No issues in 'Nakazawa' detected.
No issues in 'Nusrat.etal.' detected.
No issues in 'Parreno' detected.
No issues in 'Polio_etal' detected.
No issues in 'Rahimi' detected.
No issues in 'Seiff_ElSak' detected.
No issues in 'Sob_Taybi' detected.
No issues in 'Sun' detected.
No issues in 'Trscott_Hsu' detected.
No issues in 'VanBe_Jng_Ken' detected.
No issues in 'Wagner' detected.
No issues in 'Wang' detected.