“&”在这里是什么意思:
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
这称为位掩码。它用于数字中各个位具有不同含义的情况,而不是数字仅表示数字本身(例如,如果您将年龄保存到数据库中)。
当您以二进制形式想象任何数字并想测试数字中是否设置了某个位时,可以通过对数字和要测试的位使用二进制AND运算符来对其进行测试,如下所示:
if (number & 16 == 16)
用二进制表示,这意味着以下内容(假设您的数字是25):
if (00011001 & 00010000 == 00010000)
在这里您可以看到,第5位的数字(从下至上)均为1,因此结果数字在该位为1。由于没有其他1,所以当两个数字在该位置都为1时,得出的数字恰好是16。
我想补充一下:将不同的含义编码到一个数据库字段中通常是一种不好的做法。很难通过索引进行索引和检索,并且取决于您的DBMS,甚至可能完全未建立索引。