Oracle SQL - 获取具有 IP 地址格式值的行(点四边形)
Oracle SQL - Get rows with values in IP address format (dotted quad)
我有一个 table,它有 SOURCEIP 和 DESTINATIONIP 列,它们的数据类型是 VARCHAR2。这些列中的值可以是点分四组格式的 IP 地址,也可以是加密的匿名地址,在这种情况下,它可以是长度不一的随机字母和数字字符串。
我可以使用哪个查询,它只会给我在 SOURCEIP 或 DESTINATIONIP 中至少有一个正确(虚线四边形)IP 的行?
要验证 IP 地址,您可以使用 REGEXP_LIKE.
- 模式:
0-255.0-255.0-255.0-255
例如,
SQL> WITH DATA AS(
2 SELECT '10.20.30.40' ip_address FROM dual UNION ALL
3 SELECT 'a.b.c.d' ip_address FROM dual UNION ALL
4 SELECT '255.255.255.255' ip_address FROM dual
5 )
6 SELECT *
7 FROM data
8 WHERE REGEXP_LIKE(ip_address, '^(([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$');
IP_ADDRESS
---------------
10.20.30.40
255.255.255.255
SQL>
A value in these columns is either an IP address in dotted quad format
如果您用 点四边形 表示此 ::
,那么您仍然可以使用相同的 REGEXP 来验证 IP 地址。
- 模式:
0-255::0-255::0-255::0-255
例如,
SQL> WITH DATA AS(
2 SELECT '10::20::30::40' ip_address FROM dual UNION ALL
3 SELECT 'a.b.c.d' ip_address FROM dual UNION ALL
4 SELECT '255.255.255.255' ip_address FROM dual
5 )
6 SELECT *
7 FROM DATA
8 WHERE REGEXP_LIKE(ip_address, '^(([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\::){3}([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$');
IP_ADDRESS
---------------
10::20::30::40
SQL>
我有一个 table,它有 SOURCEIP 和 DESTINATIONIP 列,它们的数据类型是 VARCHAR2。这些列中的值可以是点分四组格式的 IP 地址,也可以是加密的匿名地址,在这种情况下,它可以是长度不一的随机字母和数字字符串。
我可以使用哪个查询,它只会给我在 SOURCEIP 或 DESTINATIONIP 中至少有一个正确(虚线四边形)IP 的行?
要验证 IP 地址,您可以使用 REGEXP_LIKE.
- 模式:
0-255.0-255.0-255.0-255
例如,
SQL> WITH DATA AS(
2 SELECT '10.20.30.40' ip_address FROM dual UNION ALL
3 SELECT 'a.b.c.d' ip_address FROM dual UNION ALL
4 SELECT '255.255.255.255' ip_address FROM dual
5 )
6 SELECT *
7 FROM data
8 WHERE REGEXP_LIKE(ip_address, '^(([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$');
IP_ADDRESS
---------------
10.20.30.40
255.255.255.255
SQL>
A value in these columns is either an IP address in dotted quad format
如果您用 点四边形 表示此 ::
,那么您仍然可以使用相同的 REGEXP 来验证 IP 地址。
- 模式:
0-255::0-255::0-255::0-255
例如,
SQL> WITH DATA AS(
2 SELECT '10::20::30::40' ip_address FROM dual UNION ALL
3 SELECT 'a.b.c.d' ip_address FROM dual UNION ALL
4 SELECT '255.255.255.255' ip_address FROM dual
5 )
6 SELECT *
7 FROM DATA
8 WHERE REGEXP_LIKE(ip_address, '^(([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\::){3}([0-9]{1}|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$');
IP_ADDRESS
---------------
10::20::30::40
SQL>