Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL按位屏蔽_Sql_Sqlite_Bit Manipulation_Bitwise Operators_Bitmask - Fatal编程技术网

SQL按位屏蔽

SQL按位屏蔽,sql,sqlite,bit-manipulation,bitwise-operators,bitmask,Sql,Sqlite,Bit Manipulation,Bitwise Operators,Bitmask,我有一个将访问权限存储为位掩码的表: 0none 1用户 2超级用户 例如,我想查询所有拥有用户+超级用户特权的帐户,我认为: SELECT * FROM "accounts" WHERE "privileges" & 3; 可以,但它也会返回所有正常用户(1)帐户。我可以看出这是正确的,因为: 1 (01) & 3 (11) ----------- = 1 (01) 我记得这在MySQL中是很容易做到的,但是我忘了这是怎么做到的 我认为解决方案可能

我有一个将访问权限存储为位掩码的表:

  • 0
    none
  • 1
    用户
  • 2
    超级用户
例如,我想查询所有拥有
用户
+
超级用户
特权的帐户,我认为:

SELECT * FROM "accounts" WHERE "privileges" & 3;
可以,但它也会返回所有正常用户(
1
)帐户。我可以看出这是正确的,因为:

  1    (01)
& 3    (11)
-----------
= 1    (01)
我记得这在MySQL中是很容易做到的,但是我忘了这是怎么做到的


我认为解决方案可能很简单,有人能给我一个提示吗?

检查
“特权”&3
的结果是否实际上等于3:

SELECT * FROM "accounts" WHERE ("privileges" & 3) == 3;

否则,查询将选择至少设置了一位的记录。

我认为您需要测试
“privileges”&3
的结果是否实际等于3。@MichaelLiu:啊,是的!傻,傻我。。。就是这样(虽然它不适用于
0
),谢谢您的帮助,请随时将您的评论作为答案发布,以便我可以接受。