为什么在sql中使用&(Ampersand)和列名

Ful*_*oon 1 t-sql sql-server bitwise-operators

我遇到了一个选择声明,如下所示:

select column_a, column_b
from MyTable 
Where column_a&1=1
Run Code Online (Sandbox Code Playgroud)

column_a的原始值是6500. column_a&1 = 1是什么意思?

Cid*_*Cid 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 --+
Run Code Online (Sandbox Code Playgroud)

二进制6500是 1100101100100

做6500&1 = 1相当于

  0001 1001 0110 0100
& 0000 0000 0000 0001
---------------------
  0000 0000 0000 0000
Run Code Online (Sandbox Code Playgroud)

该位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 --+
Run Code Online (Sandbox Code Playgroud)

一个实际的例子是对UNIX文件系统中的文件进行权限访问.

据我所知,不同的权限是执行,写入和读取,并定义如下:

执行 : 0001

写: 0010

阅读: 0100

我是否允许写(0010)一个访问权限定义为5(二进制0101)的文件?

  0101
& 0010
------
  0000
Run Code Online (Sandbox Code Playgroud)

不,我不是.

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

  0111
& 0110
------
  0110
Run Code Online (Sandbox Code Playgroud)

我是.

  • 很全面,欣赏一下。。。 (2认同)