SQL:绕过必须在二进制列上进行bitshift

时间:2018-01-22 22:53:20

标签: sql sql-server tsql bit-manipulation

我有表A,它将id存储为二进制(16)。类似于0x12345678的东西。 我还有表B,它将id存储为varbinary(80)列。此列引用与表A相同的ID,但每个id在其前面都有一个额外的填充“10”。像这样:0x101234567。

我需要在这两个表上运行连接,因此需要找到一种在这两种格式之间进行转换的方法。

从技术上讲,我可以通过做一个bithift来做到这一点,但据我所知,它不支持二进制类型。

我试图将值转换为BIGINT,然后将其转换回二进制,但BIGINT不足以保存该值,因此我最终失去了所有高位数。

我想应该有一种直截了当的方法来做到这一点,我无法想到。

1 个答案:

答案 0 :(得分:0)

你可以像这样使用按位

  WHERE colA & 0xFFFFFFF = colB & 0xFFFFFFF

取决于优化器,这可能比concat更快(因为按位并且CPU的操作非常快)。