如何从 PostgreSQL 中的两个 IP 获取 CIDR?

3 postgresql ip cidr postgresql-9.4

在 PostgreSQL 中,我可以获得 CIDR 范围的上下边界,如下所示。

但是如何从两个 IP 地址(通过 SQL)获取 CIDR?
例如

输入“192.168.0.0”;“192.168.255.255”
输出“192.168.0.0/16”

SELECT 
     network
    ,network::cidr 
    -- http://technobytz.com/ip-address-data-types-postgresql.html
    --,netmask(network::cidr) AS nm  
    --,~netmask(network::cidr) AS nnm
    ,host(network::cidr) AS lower 
    ,host(broadcast(network::cidr)) AS upper -- broadcast: last address in the range
    ,family(network::cidr) as fam  -- IPv4, IPv6
    ,masklen(network::cidr) as masklen
FROM 
(
          SELECT CAST('192.168.1.1/32' AS varchar(100)) as network 
    UNION SELECT CAST('192.168.0.0/16' AS varchar(100)) as network 
    --UNION SELECT CAST('192.168.0.1/16' AS varchar(100)) as network 

) AS tempT
Run Code Online (Sandbox Code Playgroud)

Lau*_*lbe 7

我认为您正在寻找inet_merge

test=> SELECT inet_merge('192.168.0.0', '192.168.128.255');
??????????????????
?   inet_merge   ?
??????????????????
? 192.168.0.0/16 ?
??????????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)