【发布时间】:2013-01-08 05:39:30
【问题描述】:
我在这里找到了一个很好的资源( Comparing two bitmasks in SQL to see if any of the bits match ) 用于在 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
我可以来回转换,但使用实际的位串更容易可视化。对于我的简单转换(上图),我收到一个错误,即运算符不适用于位串。还有其他可行的设置方法吗?
【问题讨论】:
-
SQL是结构化查询语言的通用术语。您使用的是什么 DBMS?字符串和位运算符因 DBMS 而异。
标签: sql postgresql match bitmask bitstring