SQL 位掩码

5

我有一张表存储访问权限,使用位掩码:

  • 0 无权限
  • 1 普通用户权限
  • 2 超级用户权限

我想查询所有拥有普通用户权限超级用户权限的账户,我认为:

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

可以使用这种方法,但也会返回所有普通用户(1)的帐户。我可以看出这是正确的原因是:

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

我记得在MySQL中很容易做到这一点,但在此期间我忘记了如何操作。

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


我认为你需要测试一下"privileges" & 3的结果是否真的等于3。 - Michael Liu
@MichaelLiu:啊,是的!我真是太傻了……就是这个问题(虽然它不能用于0),感谢您的帮助,随时欢迎您将您的评论发布为答案,以便我接受它。 - Alix Axel
1个回答

18

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

SELECT * FROM "accounts" WHERE ("privileges" & 3) == 3;
否则,查询将选择设置了至少一个位的记录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接