2010-11-02 69 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不同。