跳到主要内容

CUT_IPV6

cut_ipv6

描述

根据 IPv6 地址的类型(IPv4 映射或纯 IPv6),从 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 映射地址要截取的字节数(TINYINT 类型)

返回值

返回类型:VARCHAR

返回值含义:

  • 返回截取后的 IPv6 地址字符串
  • 如果输入是 IPv4 映射地址,使用 bytes_to_cut_for_ipv4 参数
  • 如果输入是纯 IPv6 地址,使用 bytes_to_cut_for_ipv6 参数

使用说明

  • 自动检测 IPv6 地址是否为 IPv4 映射地址(格式为 ::ffff:IPv4
  • 根据地址类型选择相应的截取字节数
  • 截取操作从地址末尾开始,将指定数量的字节置零
  • 参数值不能超过 16(IPv6 地址的总字节数)

举例

截取纯 IPv6 地址的末尾字节。

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

截取 IPv4 映射地址的末尾字节。

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

使用不同的截取参数。

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

参数值超出范围会抛出异常。

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

Keywords

CUT_IPV6