最后于 更新
IPV4_CIDR_TO_RANGE
ipv4_cidr_to_range
描述
根据 IPv4 地址和 CIDR 前缀长度,计算该网段的最小和最大 IPv4 地址,返回一个包含两个 IPv4 地址的结构体。
语法
IPV4_CIDR_TO_RANGE(<ipv4_address>, <cidr_prefix>)
参数
| 参数 | 说明 |
|---|---|
<ipv4_address> | IPv4 类型的地址。可使用 TO_IPV4 将地址字符串转换为 IPv4;INET_ATON 返回 BIGINT,不能用作此参数。 |
<cidr_prefix> | CIDR 前缀长度,SMALLINT 类型,范围 0-32。 |
返回值
返回类型:STRUCT<min: IPv4, max: IPv4>
任一参数为 NULL 时返回 NULL。
返回值含义:
- 返回一个结构体,包含两个字段:
min:网段的最小 IPv4 地址max:网段的最大 IPv4 地址
使用说明
- CIDR 前缀长度必须在 0-32 范围内
- 计算基于网络掩码,将主机位全部置零得到最小地址,全部置一得到最大地址
- 支持常量参数和列参数的各种组合
举例
计算 /24 网段的地址范围。
SELECT ipv4_cidr_to_range(TO_IPV4('192.168.1.1'), 24) as range;
+----------------------------------------+
| range |
+----------------------------------------+
| {"min": "192.168.1.0", "max": "192.168.1.255"} |
+----------------------------------------+
计算 /16 网段的地址范围。
SELECT ipv4_cidr_to_range(TO_IPV4('10.0.0.1'), 16) as range;
+----------------------------------------+
| range |
+----------------------------------------+
| {"min": "10.0.0.0", "max": "10.0.255.255"} |
+----------------------------------------+
访问结构体中的具体字段。
SELECT
ipv4_cidr_to_range(TO_IPV4('172.16.1.1'), 24).min as min_ip,
ipv4_cidr_to_range(TO_IPV4('172.16.1.1'), 24).max as max_ip;
+-------------+-------------+
| min_ip | max_ip |
+-------------+-------------+
| 172.16.1.0 | 172.16.1.255 |
+-------------+-------------+
CIDR 前缀超出范围会抛出异常。
SELECT ipv4_cidr_to_range(TO_IPV4('192.168.1.1'), 33);
ERROR 1105 (HY000): errCode = 2, detailMessage = (...)[INVALID_ARGUMENT]Illegal cidr value '33'
NULL 输入:
SELECT ipv4_cidr_to_range(NULL, 24) AS null_address,
ipv4_cidr_to_range(TO_IPV4('192.168.1.1'), NULL) AS null_prefix;
+--------------+-------------+
| null_address | null_prefix |
+--------------+-------------+
| NULL | NULL |
+--------------+-------------+
Keywords
IPV4_CIDR_TO_RANGE