2010-11-02 71 views
1

我有两套十六进制值的这样:为什么我无法比较这些十六进制值?

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

唯一的区别是前导零,这是因为它旁边的一个所有相同的号码。那么,为什么MSSQL不会将它们视为相等?我错过了什么吗?

+2

你如何比较它们?这些列是什么类型? – 2010-11-02 17:05:53

+0

在连接中使用它们 – 2010-11-02 17:06:45

+3

刚刚发现了其中的2个 - 这可能会回答我的问题,对不起。 – 2010-11-02 17:08:14

回答

8

其实,他们的不仅仅是前导零以上不同:

0x  0062EB3F 
0x000000020062EB3F 
      * 
      * 

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

5

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

0x0062EB3F != 0x000000020062EB3F 
         ^

通知,右边的数字有一个额外的2

另外,要看是什么类型的数据SQL服务器正在使用来存储这些数字。如果它们存储为INT或BIGINT,那么0x0001相当于0x1,但如果它们以VARBINARY形式存储 - 例如0x0001与0x1不同。