PostgreSQL中MAC地址的位操作
问题描述:
我需要对PostgreSQL中存储的MAC地址进行某些按位比较,如macaddr
类型,但据我所知,似乎没有任何东西可以允许我这样做(短小的MAC字符串解析成十六进制数字,这似乎不会很高性能)。PostgreSQL中MAC地址的位操作
PostgreSQL有办法有效地进行这种比较,或有效地将MAC地址转换为可以进行比较的数字或位集表示法吗?
下工作,但需要字符串处理的公平位这样做的:
select ('x'||replace(macaddr_field::varchar,':',''))::bit(48);
答
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)
作品promissed和你没有投macaddr
到bit
,剩下的就看你想要什么样的比较去执行