我在这里找到了一个很好的资源( 比较 SQL 中的两个位掩码以查看是否有任何位匹配 ),用于在 SQL 数据库中进行搜索,其中您使用位掩码存储具有多个属性的数据。但是,在示例中,所有数据都存储为整数,而 where 子句似乎仅适用于整数。
有没有一种简单的方法可以将非常相似的测试用例转换为使用完整的位串?因此,而不是像这样的例子:
with test (id, username, roles)
AS
(
SELECT 1,'Dave',1
UNION SELECT 2,'Charlie',3
UNION SELECT 3,'Susan',5
UNION SELECT 4,'Nick',2
)
select * from test where (roles & 7) != 0
而是有类似的东西:
with test (id, username, roles)
AS
(
SELECT 1,'Dave',B'001'
UNION SELECT 2,'Charlie',B'011'
UNION SELECT 3,'Susan',B'101'
UNION SELECT 4,'Nick',B'110'
)
select * from test where (roles & B'001') != 0
我可以来回转换,但使用实际的位串更容易可视化。对于我的简单转换(上图),我收到一个错误,即运算符不适用于位串。有没有另一种方法来设置它会起作用?