PostgreSQL中对MAC地址的位操作

时间:2017-10-16 18:02:44

标签: postgresql bit-manipulation mac-address

我需要对我在PostgreSQL中存储的macaddr类型的MAC地址进行某些按位比较,但据我所知,似乎没有任何东西可以让我这样做这(没有将MAC字符串解析为十六进制数,这似乎不太高效。)

PostgreSQL是否有办法有效地进行这种比较,或者有效地将MAC地址转换为可以比较的数字或位集表示?

以下工作,但需要相当多的字符串操作来执行此操作:

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

1 个答案:

答案 0 :(得分:1)

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

  

macaddr类型还支持标准关系运算符(>,   < =等)用于字典顺序和按位算术   运算符(〜,&和|)表示NOT,AND和OR。

这些是使用macaddr进行按位运算的限制,例如:

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)

按照承诺的方式工作,您不必将macaddr投放到bit,其余的取决于您要执行的比较类型