SQL Bitwise Masking

时间:2013-09-07 03:33:18

标签: sql sqlite bit-manipulation bitwise-operators bitmask

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

  • 0
  • 1用户
  • 2超级用户

我想查询具有user + super-user权限的所有帐户,我认为:

SELECT * FROM "accounts" WHERE "privileges" & 3;

可行,但它也会返回所有普通用户(1)帐户。我可以看到这是正确的,因为:

  1    (01)
& 3    (11)
-----------
= 1    (01)

我记得在MySQL中这很容易实现,但我忘了在此期间。

我认为解决方案可能很简单,任何人都可以给我一个暗示吗?

1 个答案:

答案 0 :(得分:16)

检查"privileges" & 3的结果是否实际等于3:

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

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