我在这里找到了一个很好的资源( Comparing two bitmasks in SQL to see if any of the bits match ),用于在SQL数据库中执行搜索,在这里您使用位掩码存储具有多个属性的数据。在这个例子中,所有的数据都是以int形式存储的,where子句似乎只能用ints。在SQL中使用位串(而不是整数)匹配位掩码
有没有简单的方法来转换一个非常相似的测试用例来使用完整的位串呢?因此,而不是像一个例子:
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而异。 –
我正在使用Postgres – ten