SQL Bitwise Masking

Ali*_*xel 5 sql sqlite bit-manipulation bitmask bitwise-operators

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

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

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

SELECT * FROM "accounts" WHERE "privileges" & 3;
Run Code Online (Sandbox Code Playgroud)

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

  1    (01)
& 3    (11)
-----------
= 1    (01)
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*Liu 17

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

SELECT * FROM "accounts" WHERE ("privileges" & 3) == 3;
Run Code Online (Sandbox Code Playgroud)

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