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

时间:2017-08-16 16:10:18

标签: sql sql-server sql-server-2008

我在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 个答案:

答案 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.