4
PostgreSQLでは、以下のようにCIDR範囲の上限と下限を取得できます。
しかし、2つのIPアドレス(SQLによる)からCIDRを取得するにはどうすればよいですか。
PostgreSQLの2つのIPから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
['select inet_merge( '192.168.0.0'、 '192.168.255.255');'](https://www.postgresql.org/docs/current/static/functions-net.html) – Abelisto