に最終更新
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" などの文字列形式)
戻り値
戻り値の型: BOOLEAN
戻り値の意味:
- 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