Oracle SQL - 获取具有IP地址格式值的行(点阵四边形)

时间:2015-04-08 10:03:54

标签: sql regex oracle regexp-like

我有一个包含SOURCEIP和DESTINATIONIP列的表,它们的数据类型是VARCHAR2。这些列中的值是点分四格式的IP地址,或加密的匿名地址,在这种情况下,它可以是不同长度的字母和数字的随机字符串。

我可以使用哪种查询,只能在SOURCEIP或DESTINATIONIP中为我提供至少一个正确(虚线四边形)IP的行?

1 个答案:

答案 0 :(得分:2)

要验证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>
  

这些列中的值是点分四格式的IP地址

如果您的意思是:: 点四边形,那么您仍然可以使用相同的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>