IS_IP_ADDRESS_IN_RANGE
is_ip_address_in_range
説明
指定されたIPアドレスが与えられたCIDRネットワーク範囲内にあるかどうかを確認します。IPv4とIPv6の両方のアドレスをサポートします。
構文
IS_IP_ADDRESS_IN_RANGE(<ip_address>, <cidr_range>)
パラメータ
<ip_address>: チェックするIPアドレス(IPv4、IPv6タイプまたは文字列)<cidr_range>: CIDRネットワーク範囲("192.168.1.0/24"などの文字列形式)
戻り値
戻り値の型: TINYINT
戻り値の意味:
- 1を返す: IPアドレスが指定されたCIDR範囲内にあることを示す
- 0を返す: IPアドレスが指定されたCIDR範囲内にないことを示す
- 入力がNULLの場合はNULLを返す
使用上の注意
- IPv4アドレスとIPv6アドレスの両方のチェックをサポート
- CIDR範囲は有効な形式である必要がある("192.168.1.0/24"や"2001:db8::/64"など)
- 転置インデックス最適化をサポートし、CIDRパラメータが定数の場合はインデックス高速化を使用可能
- 無効なCIDR形式の場合は0を返す
- 入力パラメータがNULLの場合はNULLを返す
例
IPv4アドレスが指定されたネットワークセグメント内にあるかをチェックします。
SELECT is_ip_address_in_range(to_ipv4('192.168.1.100'), '192.168.1.0/24') as in_range;
+----------+
| in_range |
+----------+
| 1 |
+----------+
指定されたネットワークセグメント内にIPv6アドレスが存在するかを確認します。
SELECT is_ip_address_in_range(INET6_ATON('2001:db8::100'), '2001:db8::/64') as in_range;
+----------+
| in_range |
+----------+
| 1 |
+----------+
指定されたネットワークセグメント内に複数のアドレスが含まれているかを確認します。
SELECT
is_ip_address_in_range(to_ipv4('192.168.1.100'), '192.168.1.0/24') as in_192_168_1,
is_ip_address_in_range(to_ipv4('192.168.2.100'), '192.168.1.0/24') as in_192_168_2,
is_ip_address_in_range(to_ipv4('10.0.0.1'), '192.168.1.0/24') as in_10_0_0;
+-------------+-------------+----------+
| in_192_168_1| in_192_168_2| in_10_0_0|
+-------------+-------------+----------+
| 1 | 0 | 0 |
+-------------+-------------+----------+
異なるCIDRプレフィックス長を持つ範囲を確認してください。
SELECT
is_ip_address_in_range(to_ipv4('192.168.1.100'), '192.168.0.0/16') as in_16,
is_ip_address_in_range(to_ipv4('192.168.1.100'), '192.168.1.0/24') as in_24,
is_ip_address_in_range(to_ipv4('192.168.1.100'), '192.168.1.100/32') as in_32;
+--------+--------+--------+
| in_16 | in_24 | in_32 |
+--------+--------+--------+
| 1 | 1 | 1 |
+--------+--------+--------+
無効なCIDR形式の場合は0を返します。
SELECT is_ip_address_in_range(to_ipv4('192.168.1.100'), 'invalid-cidr') as in_range;
+----------+
| in_range |
+----------+
| 0 |
+----------+
入力パラメータがNULLの場合、NULLを返します。
SELECT is_ip_address_in_range(NULL, '192.168.1.0/24') as null_ip;
+---------+
| null_ip |
+---------+
| NULL |
+---------+
SELECT is_ip_address_in_range(to_ipv4('192.168.1.100'), NULL) as null_cidr;
+-----------+
| null_cidr |
+-----------+
| NULL |
+-----------+
SELECT is_ip_address_in_range(NULL, NULL) as both_null;
+-----------+
| both_null |
+-----------+
| NULL |
+-----------+
キーワード
IS_IP_ADDRESS_IN_RANGE