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

时间:2010-11-02 17:04:14

标签: sql-server database tsql hex

我有两组十六进制值:

---------- ------------------
0x0062EB3F 0x000000020062EB3F
0x0062EF17 0x000000020062EF17
0x0062EF30 0x000000020062EF30
0x0062EF38 0x000000020062EF38
0x0062EF3B 0x000000020062EF3B
0x0062EF3F 0x000000020062EF3F
0x0062EF40 0x000000020062EF40

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

2 个答案:

答案 0 :(得分:8)

实际上,它们的区别不仅仅是前导零:

 0x        0062EB3F 
 0x000000020062EB3F
          *
          *

那里有一个额外的“2”.....所以他们相同!

答案 1 :(得分:5)

首先,您在问题中列出的数字并不相同:

0x0062EB3F  !=  0x000000020062EB3F
                         ^

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

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