代码之家  ›  专栏  ›  技术社区  ›  m.edmondson

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

  •  1
  • m.edmondson  · 技术社区  · 14 年前

    我有两组十六进制值,如下所示:

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

    唯一的区别是前导零,它们都和它旁边的数字相同。那么为什么MSSQL不把它们算作是相等的呢?我错过什么了吗?

    2 回复  |  直到 14 年前
        1
  •  8
  •   marc_s    14 年前

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

     0x        0062EB3F 
     0x000000020062EB3F
              *
              *
    

    里面有一个额外的“2”……所以他们是 相同的!

        2
  •  5
  •   Mike Dinescu    14 年前

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

    0x0062EB3F  !=  0x000000020062EB3F
                             ^
    

    注意,右边的号码有一个额外的2

    另外,它还取决于SQL Server用于存储数字的数据类型。如果它们存储为int或bigint,则0x001相当于0x1,但如果它们存储为varbinary,例如-则0x001与0x1不同。