小编ten*_*ten的帖子

在SQL中使用位串(而不是int)匹配位掩码

我在这里找到了一个很好的资源( 比较SQL中的两个位掩码以查看是否有任何匹配 )用于在SQL数据库中进行搜索,在SQL数据库中使用位掩码存储具有多个属性的数据.但是,在示例中,所有数据都存储为int,而where子句似乎只适用于int.

是否有一种简单的方法可以将非常相似的测试用例转换为使用完整的位串?所以不是像下面这样的例子:

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 
Run Code Online (Sandbox Code Playgroud)

而是有类似的东西:

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 
Run Code Online (Sandbox Code Playgroud)

我可以来回转换,但用实际的位串可视化更容易.对于我的简单转换(上面),我得到一个错误,操作符不适用于位串.还有另一种方法可以设置它吗?

sql postgresql bitmask match bitstring

2
推荐指数
1
解决办法
6405
查看次数

标签 统计

bitmask ×1

bitstring ×1

match ×1

postgresql ×1

sql ×1