首页 > 解决方案 > 翻译 unix 风格的按位整数的 Oracle 查询

问题描述

现在,当我们想在一个列中存储多个“选项”时,我们通常会这样做:00000101 但是,还有另一种方式,它只是存储为整数,就像 unix 权限一样,其中每个权限选项都有分配给它的 1、2 或 4,它们的任何组合都可以用 1 到 7 的数字表示。

我有使用第二种方法的数据,并且我正在寻找一个查询,该查询将返回给定从 1 到 7 的整数的匹配行(或者,对于更大的数据集)。

我已经构建了一些“有效”但很丑陋的东西,我希望有人知道一个更优雅的解决方案。我的根本无法很好地扩展。

这是我所拥有的:

select company from
(
    select 7 bit, 'ABC' company from dual union select 7 bit, 'DEF' company from dual union select 7 bit, 'GHI' company from dual
    union
    select 6 bit, 'DEF' company from dual union select 6 bit, 'GHI' company from dual
    union
    select 5 bit, 'ABC' company from dual union select 5 bit, 'GHI' company from dual
    union
    select 4 bit, 'GHI' company from dual 
    union
    select 3 bit, 'ABC' company from dual union select 3 bit, 'DEF' company from dual
    union
    select 2 bit, 'DEF' company from dual
    union
    select 1 bit, 'ABC' company from dual
) comp_bits
where bit = 5

有什么建议吗?这要求我有 12 行而不是 3 行。

谢谢

////////////////////////////////////

MathGuy 的回答是正确的答案。谢谢你。这是使用 bitand 重写的示例:

with comp_bits as
(
    select 4 bit, 'GHI' company from dual 
    union
    select 2 bit, 'DEF' company from dual
    union
    select 1 bit, 'ABC' company from dual
) 
select company from comp_bits where bitand(5,bit) != 0

标签: sqloracle

解决方案


推荐阅读