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

CUT_IPV6

Описание​

Отсекает заданное количество байтов с конца адреса IPv6 в зависимости от его типа (IPv4-mapped или чистый IPv6) и возвращает строку с усечённым адресом IPv6.

Синтаксис​

CUT_IPV6(<ipv6_address>, <bytes_to_cut_for_ipv6>, <bytes_to_cut_for_ipv4>)

Параметры​

  • <ipv6_address>: адрес типа IPv6
  • <bytes_to_cut_for_ipv6>: количество байтов для отсечения у адресов чистого IPv6 (тип TINYINT)
  • <bytes_to_cut_for_ipv4>: количество байтов для отсечения у адресов IPv4-mapped (тип TINYINT)

Возвращаемое значение​

Тип возвращаемого значения: VARCHAR

Описание возвращаемого значения:

  • Возвращает строку с усечённым адресом IPv6
  • Если входной адрес имеет тип IPv4-mapped, используется параметр bytes_to_cut_for_ipv4
  • Если входной адрес имеет тип чистого IPv6, используется параметр bytes_to_cut_for_ipv6
  • Возвращает NULL, если любой из трёх параметров <ipv6_address>, <bytes_to_cut_for_ipv6>, <bytes_to_cut_for_ipv4> равен NULL

Примечания по использованию​

  • Автоматически определяет, является ли адрес IPv6 адресом IPv4-mapped (формат ::ffff:IPv4)
  • Выбирает количество байтов для отсечения в зависимости от типа адреса
  • Отсечение выполняется с конца адреса: указанное количество байтов обнуляется
  • Значения параметров не могут превышать 16 (общее количество байтов в адресе IPv6)

Примеры​

Отсечение байтов в конце адреса чистого IPv6.

SELECT cut_ipv6(to_ipv6('2001:db8::1'), 4, 4) as cut_result;
+------------------+
| cut_result |
+------------------+
| 2001:db8:: |
+------------------+

Отсечение байтов в конце адреса IPv4-mapped.

SELECT cut_ipv6(to_ipv6('::ffff:192.168.1.1'), 4, 4) as cut_result;
+----------------+
| cut_result |
+----------------+
| ::ffff:0.0.0.0 |
+----------------+

Использование разных параметров отсечения.

SELECT 
cut_ipv6(to_ipv6('2001:db8::1'), 8, 4) as ipv6_cut_8,
cut_ipv6(to_ipv6('::ffff:192.168.1.1'), 4, 8) as ipv4_cut_8;
+------------+------------+
| ipv6_cut_8 | ipv4_cut_8 |
+------------+------------+
| 2001:db8:: | :: |
+------------+------------+

При значении NULL у любого из параметров возвращается NULL

select cut_ipv6(NULL, NULL, NULL);
+----------------------------+
| cut_ipv6(NULL, NULL, NULL) |
+----------------------------+
| NULL |
+----------------------------+

select cut_ipv6(to_ipv6("::"), NULL, 0);
+----------------------------------+
| cut_ipv6(to_ipv6("::"), NULL, 0) |
+----------------------------------+
| NULL |
+----------------------------------+

select cut_ipv6(to_ipv6("::"), 4, NULL);
+----------------------------------+
| cut_ipv6(to_ipv6("::"), 4, NULL) |
+----------------------------------+
| NULL |
+----------------------------------+

Если значения параметров выходят за допустимый диапазон, возникает исключение.

SELECT cut_ipv6(to_ipv6('2001:db8::1'), 17, 4);
ERROR 1105 (HY000): errCode = 2, detailMessage = (...)[INVALID_ARGUMENT]Illegal value for argument 2 TINYINT of function cut_ipv6

SELECT cut_ipv6(to_ipv6('2001:db8::1'), 4, 122);
ERROR 1105 (HY000): errCode = 2, detailMessage = (...)[INVALID_ARGUMENT]Illegal value for argument 3 TINYINT of function cut_ipv6

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

CUT_IPV6