为什么在SQL中将&(Ampersand)与列名一起使用

时间:2019-01-24 09:29:08

标签: sql-server tsql bitwise-operators

我遇到了如下选择语句:

select column_a, column_b
from MyTable 
Where column_a&1=1

column_a的原始值为6500。 column_a&1 = 1表示什么?

1 个答案:

答案 0 :(得分:6)

这是按位的AND运算符。做someNumber & someOtherNumber = someOtherNumber将检查someOtherNumber中的someNumber位是否存在

  1000 1010
& 0000 1000 --+
-----------   +---- same result, the bit is present
  0000 1000 --+

  1000 1010
& 0000 0100 --+
-----------   +---- different result, the bit is absent
  0000 0000 --+

6500的二进制为1100101100100

做6500&1 = 1等同于

  0001 1001 0110 0100
& 0000 0000 0000 0001
---------------------
  0000 0000 0000 0000

0000 0000 0000 0001位不在0001 1001 0110 0100中,因此结果为0000 0000 0000 0000

当然,该操作可以一次完成很多位:

  1000 1010
& 0000 0110 --+
-----------   +---- different result, the bits are (partially) absents
  0000 0010 --+

一个实际的例子是对文件的权限访问,例如在UNIX系统中。

据我所知,不同的权利是 execute write read ,并且定义如下:

执行:0001

写:0010

阅读:0100

我可以写(0010)访问权限定义为5(二进制0101)的文件吗?

  0101
& 0010
------
  0000

不,我不是。

我是否允许读写(0110)访问权限定义为7(二进制0111)的文件?

  0111
& 0110
------
  0110

是的。