2017-10-16 12 views
2

PostgreSQLに格納されているMACアドレスの特定のビット単位の比較をmacaddrタイプとする必要がありますが、これまで許可されていないように見えます私はこれを行います(MACストリングを16進数に分解するのは不十分です。これはあまり効果がないようです)。PostgreSQLのMACアドレスのビット操作

PostgreSQLには、この種の比較を効率的に行う方法や、効率的にMACアドレスを数値またはビットセット表現に変換して比較する方法がありますか?

以下の作品が、そうするために文字列操作の公平なビットを必要とします。

select ('x'||replace(macaddr_field::varchar,':',''))::bit(48);

答えて

1

https://www.postgresql.org/docs/current/static/functions-net.html

MACADDR型はまた、>( <を標準関係演算子をサポートしています=など)、NOT、AND、ORのビット演算( 演算子(〜、&および|)。

これらはMACADDRとビット演算のために自分の限界、例えば、次のとおりです。promissed、あなたがbitmacaddrをキャストする必要はありませんよう

t=# with mac(a,b) as 
(values('01:00:00:ff:aa:78'::macaddr,'0e:7e:e9:f0:fa:80'::macaddr)) 
select a|b, ~ a, a&b, a <= b from mac; 
    ?column?  |  ?column?  |  ?column?  | ?column? 
-------------------+-------------------+-------------------+---------- 
0f:7e:e9:ff:fa:f8 | fe:ff:ff:00:55:87 | 00:00:00:f0:aa:00 | t 
(1 row) 

作品、残りはあなたが望む比較の種類に依存します実行する