2017-10-16 139 views
2

我需要对PostgreSQL中存储的MAC地址进行某些按位比较,如macaddr类型,但据我所知,似乎没有任何东西可以允许我这样做(短小的MAC字符串解析成十六进制数字,这似乎不会很高性能)。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位运算的限制,如:

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和你没有投macaddrbit,剩下的就看你想要什么样的比较去执行