ip_prefix(ip_address, prefix_bits) → ipprefix

使用子网掩码长度 prefix_bits,返回 IP 地址 ip_address 的 IP 前缀。ip_address 可以是 VARCHAR 类型或者 IPADDRESS 类型。

示例

1
2
3
4
5
SELECT ip_prefix(CAST('192.168.255.255' AS IPADDRESS), 9);
SELECT ip_prefix('192.168.255.255', 9);

-- 以上两条语句的输出结果均为:
-- 192.128.0.0/9

ip_subnet_min(ip_prefix) → ip_address

返回子网网段 ip_prefix 指定的最小 IP 地址。

示例

1
2
3
4
5
SELECT ip_subnet_min(IPPREFIX '192.168.255.255/9');
-- 输出结果为 192.128.0.0

SELECT ip_subnet_min(IPPREFIX '2001:0db8:85a3:0001:0001:8a2e:0370:7334/48');
-- 输出结果为 2001:db8:85a3::

ip_subnet_max(ip_prefix) → ip_address

返回子网网段 ip_prefix 指定的最大 IP 地址。

示例

1
2
3
4
5
SELECT ip_subnet_max(IPPREFIX '192.64.0.0/9'); 
-- 输出结果为 192.127.255.255

SELECT ip_subnet_max(IPPREFIX '2001:0db8:85a3:0001:0001:8a2e:0370:7334/48');
-- 输出结果为 2001:db8:85a3:ffff:ffff:ffff:ffff:ffff

ip_subnet_range(ip_prefix)

返回一个包含两个 IP 地址的数组。该数组分别包含子网网段 ip_prefix 指定的最小 IP 地址和最大 IP 地址。

示例

1
2
3
4
5
SELECT ip_subnet_range(IPPREFIX '1.2.3.160/24'); 
-- 输出结果为 ['1.2.3.0','1.2.3.255']

SELECT ip_subnet_range(IPPREFIX '64:ff9b::52f4/120');
-- 输出结果为 ['64:ff9b::5200','64:ff9b::52ff']

is_subnet_of(ip_prefix, ip_address) → boolean

如果 ip_addressip_prefix 指定子网网段内的地址,则返回 true

示例

1
2
3
4
5
SELECT is_subnet_of(IPPREFIX '1.2.3.128/26', IPADDRESS '1.2.3.129'); 
-- 输出结果为 true

SELECT is_subnet_of(IPPREFIX '64:fa9b::17/64', IPADDRESS '64:ffff::17');
-- 输出结果为 false

is_subnet_of(ip_prefix1, ip_prefix2) → boolean

如果 ip_prefix2ip_prefix1 的子网网段,则返回 true

示例

1
2
3
4
5
6
7
8
SELECT is_subnet_of(IPPREFIX '192.168.3.131/26', IPPREFIX '192.168.3.144/30'); 
-- 输出结果为 true

SELECT is_subnet_of(IPPREFIX '64:ff9b::17/64', IPPREFIX '64:ffff::17/64');
-- 输出结果为 false

SELECT is_subnet_of(IPPREFIX '192.168.3.131/26', IPPREFIX '192.168.3.131/26');
-- 输出结果为 true

(END)