什么是“&”意味着在这个sql where子句中?

时间:2013-03-08 08:47:08

标签: sql tsql

“&”是什么?这里的意思是:

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

5 个答案:

答案 0 :(得分:5)

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

当您想象它的二进制形式中的任何数字并且想要测试数字中是否设置了某个位时,您可以使用二进制AND运算符来测试它,并使用您要测试的数字和位,如下所示: / p>

if (number & 16 == 16)

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

if (00011001 & 00010000 == 00010000)

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

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

答案 1 :(得分:0)

这是一个按位AND。

  

&amp;按位运算符在两个表达式之间执行按位逻辑AND,为两个表达式取每个对应的位。当且仅当输入表达式中的两个位(对于当前正在解析的位)的值为1时,结果中的位才设置为1;否则,结果中的位设置为0.

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

在这种情况下,它与一个标志一起使用,其中多个值存储在一个字段中,然后按位AND操作用于检查特定状态 - 或者在此特定情况下 - 检查字段不包含指定的状态。

答案 2 :(得分:0)

这是按位AND。它只是检查值中的第4位是否未设置。

我会将此表达式重写为TransSt & 16 = 0

答案 3 :(得分:0)

这是按位AND。请参阅此MSDN Article

答案 4 :(得分:0)

这是一个按位运算符。

  

按位运算在其各个位的级别上对一个或多个位模式或二进制数字进行操作。它是处理器直接支持的快速,原始动作,用于操作值以进行比较和计算。在简单的低成本处理器上,通常,按位运算比除法快得多,比乘法快几倍,有时比加法快得多。虽然由于较长的指令流水线和其他架构设计选择,现代处理器通常执行加法和乘法与按位运算一样快,但由于资源使用减少,按位运算通常会使用较少的功率/性能。

来自http://en.wikipedia.org/wiki/Bitwise_operation