IP 函数¶
- ip_prefix(ip_address, prefix_bits) -> ipprefix()¶
返回给定
ip_address
的 IP 前缀,子网大小为prefix_bits
。ip_address
可以是VARCHAR
类型或IPADDRESS
类型。SELECT ip_prefix(CAST('192.168.255.255' AS IPADDRESS), 9); -- {192.128.0.0/9} SELECT ip_prefix('2001:0db8:85a3:0001:0001:8a2e:0370:7334', 48); -- {2001:db8:85a3::/48}
- ip_subnet_min(ip_prefix) -> ip_address()¶
返回
ip_prefix
指定的子网中类型为IPADDRESS
的最小 IP 地址。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
指定的子网中类型为IPADDRESS
的最大 IP 地址。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) -> array(ip_address)¶
返回一个包含 2 个 IP 地址的数组。该数组包含
ip_prefix
指定的子网中最小和最大的 IP 地址。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_address
位于ip_prefix
的子网中,则返回true
。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_prefix2
是ip_prefix1
的子网,则返回true
。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
- ip_prefix_collapse(array(ip_prefix)) -> array(ip_prefix)¶
返回输入
IPPREFIX
数组的最小 CIDR 表示形式。输入数组中的每个IPPREFIX
必须是相同的 IP 版本(即,只有 IPv4 或只有 IPv6),否则查询将失败并引发错误。SELECT IP_PREFIX_COLLAPSE(ARRAY[IPPREFIX '192.168.0.0/24', IPPREFIX '192.168.1.0/24']); -- [{192.168.0.0/23}] SELECT IP_PREFIX_COLLAPSE(ARRAY[IPPREFIX '2620:10d:c090::/48', IPPREFIX '2620:10d:c091::/48']); -- [{2620:10d:c090::/47}] SELECT IP_PREFIX_COLLAPSE(ARRAY[IPPREFIX '192.168.1.0/24', IPPREFIX '192.168.0.0/24', IPPREFIX '192.168.2.0/24', IPPREFIX '192.168.9.0/24']); -- [{192.168.0.0/23}, {192.168.2.0/24}, {192.168.9.0/24}]