Перейти к содержимому
Последнее обновление

IPV4_CIDR_TO_RANGE

Описание​

Вычисляет минимальный и максимальный IPv4-адреса сегмента сети по IPv4-адресу и длине префикса CIDR, возвращая структуру с двумя 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 |
+--------------+-------------+

Ключевые слова​

IPV4_CIDR_TO_RANGE