簡體   English   中英

Postgres中是否具有與Oracle的BITAND()函數等效的功能?

[英]Is there an equivalent to Oracle's BITAND() function in Postgres?

我知道有一個Postgres函數BIT_AND(),這不是同一件事-實際上,這與我的最終目標相反。 我希望能夠將Postgres BIT_AND()之類的操作結果解碼回原始位。 我有在Oracle中執行此操作的代碼,如下所示:

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

如果設置了foo.bar的第一位,則first_bit將返回1,否則返回0,依此類推。我可以將除BITAND()之外的所有內容轉換為Postgres,而我發現在線討論該問題的唯一內容是論壇上的一個話題。從2010年起的devshed.com反饋為零-感謝您提供任何見解。

編輯:下面回答,謝謝! 這是我需要做的一些調整,以使其正常運行,所有這些都是因為我實際上正在處理多達43個編碼為位的選項,並且我真的希望能夠使用power()函數來進行調整很清楚我要去哪一點,所以我不得不轉換數據類型。

select ((foo.bar & power(2,1)::bigint) > 0)::int as first_bit,
    ((foo.bar & power(2,43)::bigint) > 0)::int as forty_third_bit
from (select 1031 as bar union all
    select 8796160131072 
    ) foo

在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函數相同。

是一個SQL Fiddle,可以更好地說明運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM