为什么我不能比较这些十六进制值?

m.e*_*son 1 t-sql database sql-server hex

我有两组十六进制值:

---------- ------------------
0x0062EB3F 0x000000020062EB3F
0x0062EF17 0x000000020062EF17
0x0062EF30 0x000000020062EF30
0x0062EF38 0x000000020062EF38
0x0062EF3B 0x000000020062EF3B
0x0062EF3F 0x000000020062EF3F
0x0062EF40 0x000000020062EF40
Run Code Online (Sandbox Code Playgroud)

唯一的区别是前导零,这些是与旁边的零相同的数字.那么为什么MSSQL不认为它们是平等的呢?我错过了什么吗?

mar*_*c_s 8

实际上,它们的不同之处不仅仅是前导零:

 0x        0062EB3F 
 0x000000020062EB3F
          *
          *
Run Code Online (Sandbox Code Playgroud)

那里还有一个额外的"2".....所以它们一样!


Mik*_*scu 5

首先,您在问题中列出的数字不一样:

0x0062EB3F  !=  0x000000020062EB3F
                         ^
Run Code Online (Sandbox Code Playgroud)

请注意,右边的数字有2个额外的数字

此外,它还取决于SQL Server用于存储数字的数据类型.如果它们存储为INT或BIGINT,则0x0001等效于0x1,但如果它们存储为例如VARBINARY - 那么0x0001与0x1不同.