我需要对我在PostgreSQL中存储的macaddr
类型的MAC地址进行某些按位比较,但据我所知,似乎没有任何东西可以让我这样做这(没有将MAC字符串解析为十六进制数,这似乎不太高效。)
PostgreSQL是否有办法有效地进行这种比较,或者有效地将MAC地址转换为可以比较的数字或位集表示?
以下工作,但需要相当多的字符串操作来执行此操作:
select ('x'||replace(macaddr_field::varchar,':',''))::bit(48);
答案 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
,其余的取决于您要执行的比较类型