这里的"&"是什么意思:
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)
它被称为位掩码.它用于数字中各个位具有不同含义的情况,而不是仅表示数字本身的数字(例如,如果将年龄保存到数据库中).
当你想象任意数量在它的二进制形式,并希望测试是否在一批具有一定位设置,您使用的数量和你想测试,这样的位二进制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甚至可能完全没有索引.
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |