SQL将字节转换为INT和BIGINT

SQL将字节转换为INT和BIGINT,sql,sql-server,int,sql-server-2016,bigint,Sql,Sql Server,Int,Sql Server 2016,Bigint,有人能解释为什么在SQL中将相同的字节转换为INT和BIGINT会产生截然不同的结果吗 我使用了一个小例子: SELECT '00T1p000029eYmpEAE' AS OriginalString, HASHBYTES('SHA2_512', '00T1p000029eYmpEAE') AS HashedString, CONVERT(BIGINT, HASHBYTES('SHA2_512', '00T1p000029eYmpEAE')) AS IntValue, 9223

有人能解释为什么在SQL中将相同的字节转换为INT和BIGINT会产生截然不同的结果吗

我使用了一个小例子:

SELECT '00T1p000029eYmpEAE' AS OriginalString,
   HASHBYTES('SHA2_512', '00T1p000029eYmpEAE') AS HashedString,
   CONVERT(BIGINT, HASHBYTES('SHA2_512', '00T1p000029eYmpEAE')) AS IntValue,
   9223372036854775807 AS BigIntMax,
   CONVERT(INT, HASHBYTES('SHA2_512', '00T1p000029eYmpEAE')) AS BigInteValue;
到目前为止,我发现: 但与OP不同的是,我不清楚转换过程中发生了什么


使用MS SQL Server 2016。

您使用的是哪些数据库管理系统?(该查询特定于产品。)MS SQL Server 2016-也更新了该问题。顾名思义,SHA-512生成512位哈希(64字节)。这不适用于
BIGINT
INT
。如果将这两个值都转换回
VARBINARY(MAX)
,您将看到SQL Server只需取最低有效字节(
0xEA936AAB39BCC918
表示
BIGINT
0x39BCC918
表示
INT
)。将这些值解释为2的补码整数,就这样了。