什么是“&”在这个SQL意味着where子句?(What does “&” means in thi

2019-08-17 09:34发布

什么是“和”的意思是在这里:

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

Answer 1:

这就是所谓的位掩码。 它的处理是在一些个别位具有不同的含义的情况下使用,而不是一些只是意义本身的数量(例如,如果你的年龄保存到数据库中)。

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

if (number & 16 == 16)

在二进制,这意味着以下(假设你的号码是25):

if (00011001 & 00010000 == 00010000)

这里可以看出,即在5位(从下往上数)数字都是1,为此所得的数目在该位具有1。 由于没有其他1S,所得到的号码是16恰好当两个号码在该位置处有一个1。

我想补充:它通常是不好的做法,不同的意义编码成一个数据库字段。 这是很难的索引和索引进行检索,并根据您的DBMS甚至可能完全没有索引的。



Answer 2:

这是一个按位与。

所述&位运算符执行按位逻辑与两个表达式之间,以每一对应位为两个表达式。 在结果中的位被设置为1,当且仅当两个比特(用于当前位被解决)在输入表达式具有1的值; 否则,在结果的比特被设置为0。

从http://msdn.microsoft.com/en-us/library/ms174965.aspx

或在这种特定情况下- -检查该字段不包含指定的状态,在此情况下,它有一个标志,在多个值存储在一个字段,然后按位与运算用于检查特定的状态下使用。



Answer 3:

这是按位AND 。 它只是检查是否在价值4位未设置。

我想重写这个表达式作为TransSt & 16 = 0



Answer 4:

这是按位与。 请参阅此MSDN文章 。



Answer 5:

这是一个按位与运算。

按位操作的一个或多个位模式或二进制数在它们的各个位的级别运行。 它是由处理器直接支持一个快速,原始的动作,并用于操纵用于比较和计算值。 上简单的低成本的处理器,通常,按位操作比划分明显更快,比乘法快几倍,而且比另外有时显著更快。 虽然现代的处理器通常是由于其较长的指令流水线等建筑设计选择执行加法和乘法一样快位运算,位运算做通常使用的,因为减少了资源的使用更少的功耗/性能。

从http://en.wikipedia.org/wiki/Bitwise_operation



文章来源: What does “&” means in this sql where clause?
标签: sql tsql