1

SOURCEIP 列と DESTINATIONIP 列を持つテーブルがあり、そのデータ型は VARCHAR2 です。これらの列の値は、ドットで区切られたクワッド形式の IP アドレス、または暗号化された匿名アドレスのいずれかです。この場合、さまざまな長さの文字と数字のランダムな文字列になります。

SOURCEIP または DESTINATIONIP のいずれかで少なくとも 1 つの適切な (点線で囲まれたクワッド) IP を持つ行のみを提供する、どのクエリを使用できますか?

4

1 に答える 1

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>
于 2015-04-08T10:11:11.680 に答える