我知道有一个Postgres函数BIT_AND(),这不是一回事 - 实际上它与我的最终目标相反。我希望能够将像Postgres BIT_AND()这样的操作的结果解码回原始位。我有在Oracle中执行此操作的代码,如下所示:
<!-- HTML -->
<div id="my-canvas-container">
<!-- this is where your canvas would load -->
</div>
/* CSS */
html, body {
padding: 0;
margin: 0;
}
#my-canvas-container {
min-width:100%
}
如果foo.bar的第一位设置,first_bit将返回1,否则为0,等等。我可以将所有内容翻译为Postgres,除了BITAND(),我发现在网上讨论这个问题的唯一方法就是一个帖子在forums.devshed.com上从2010年开始零回复 - 欣赏任何见解。
编辑:下面回答,谢谢!以下是我需要做的调整以使其工作,所有这些都是因为我实际上处理了多达43个编码为位的选项,我真的希望能够使用power()函数来制作很清楚我要去哪一点,所以我不得不转换数据类型。select NVL(DECODE(BITAND(foo.bar, POWER (2, 1)), POWER (2, 1), 1), 0) first_bit,
NVL(DECODE(BITAND(foo.bar, POWER (2, 2)), POWER (2, 2), 1), 0) second_bit
from
(select 1234 bar from dual
union select 12345 bar from dual) foo
答案 0 :(得分:1)
在Postgres中,按位和运算符为&
。
你似乎想要这样的东西:
select ((foo.bar & 2) > 0)::int as first_bit,
((foo.bar & 4) > 0)::int as second_bit
from (select 1234 as bar union all
select 12345
) foo;
我不确定为什么要计算第二个位,但操作符与Oracle函数的作用相同。
Here是一个更好地说明运算符的SQL小提琴。