sql - 翻译 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
解决方案
推荐阅读
- c++ - C ++:实际上不是从二进制文件中读取
- javascript - 按属性值排序数组错误
- perl - 在 perl 中动态加载模块
- css - Web 浏览器如何从字体系列中选择字体?
- c++ - 为什么这个函数会导致内存泄漏?
- java - 如何使用 JAVA 在 Web App 中导入和显示 3D 文件 (.stl)?
- java - GWT - 在本机方法中直接使用 java bean 参数
- android-studio - 在 Android Studio 中将 gradle 文件显示为其模块的一部分
- terraform - 我可以在 Terraform Cloud 上使用 Terragrunt
- datepicker - Materializecss date picker is not working