Последнее обновление
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