"&"在这个sql where子句中意味着什么?

dan*_*ren 1 sql t-sql

这里的"&"是什么意思:

select pt.TrTp, sum(pt.TrTp)
from ProdTr pt
where TransSt & 16 <> 16  // this is the row that i don´t understand..
group by pt.TrTp
Run Code Online (Sandbox Code Playgroud)

0xC*_*ABE 5

它被称为位掩码.它用于数字中各个位具有不同含义的情况,而不是仅表示数字本身的数字(例如,如果将年龄保存到数据库中).

当你想象任意数量在它的二进制形式,并希望测试是否在一批具有一定位设置,您使用的数量和你想测试,这样的位二进制AND运算测试:

if (number & 16 == 16)
Run Code Online (Sandbox Code Playgroud)

在二进制中,这意味着以下(假设您的数字是25):

if (00011001 & 00010000 == 00010000)
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到,第5位(从下往上算起)的数字都是1,因此得到的数字在该位有1.由于没有其他1,当两个数字在此位置都有1时,结果数字是16.

我想补充一点:将不同含义编码到一个数据库字段中通常是不好的做法.索引很难索引和检索,并且根据您的DBMS甚至可能完全没有索引.