抱歉这个非常基本的问题。 &
运算符在此SQL
WHERE (sc.Attributes & 1) = 0
sc
是包含列attributes
的表的别名。
我正在尝试理解报告中的一些SQL,并且该行使其返回0个条目。如果我发表评论它是有效的。我的SQL知识有限,我不确定& 1
正在做什么。
答案 0 :(得分:46)
& is the bitwise logical and operator - 它对2个整数值执行操作。
WHERE (sc.Attributes & 1) = 0
上面的代码检查sc.Attributes是否为偶数。这与说第一位没有设置是一样的。
由于列的名称虽然:“Attributes”,但“1”值可能只是一些具有一些外部含义的标志。
对于存储在数字中的每个标志,通常使用1个二进制数字作为属性。因此,为了测试你使用sc.Attributes& 1的第一个位,测试你使用sc.Attributes& 2的第二个,测试你使用sc.Attributes& 4的第三个,来测试你使用sc的第四个。属性& 8,......
= 0部分正在测试是否未设置第一位。
一些二进制示例:( ==显示操作结果)
//Check if the first bit is set, same as sc.Attributes&1
11111111 & 00000001 == 1
11111110 & 00000001 == 0
00000001 & 00000001 == 1
//Check if the third bit is set, same as sc.Attributes&4
11111111 & 00000100 == 1
11111011 & 00000100 == 0
00000100 & 00000100 == 1
答案 1 :(得分:3)
答案 2 :(得分:3)
这是bitwise and。
答案 3 :(得分:1)
当你把它标记为sql server时,我想我会从不同的角度添加一些内容,因为本周也会遇到其中一个。
如果在谓词中使用,这些可能会损害查询的性能。很容易制作自己的例子。以下是我的查询摘录
WHERE
advertiserid = @advertiserid
AND (is_deleted & @dirty > 0)
WHERE
advertiserid = @advertiserid
AND (is_deleted > 0 AND @dirty > 0)
通过简单地使用适当的值定义每个列,这允许优化器删除书签查找,性能统计显示X10性能提升。