sql >> Databáze >  >> RDS >> Oracle

Oracle:Převod adresy IPv4 na číslo?

  • extrahujte čtyři oktety adresy pomocí regexp_substr.
  • rekonstituujte hodnotu posunutím oktetů zpět do jejich původních pozic.

Regulární výraz může být relativně drahý, takže pokud to děláte často, můžete zvážit uložení číselné hodnoty do mezipaměti ve vaší tabulce vedle IP adresy.

with addr as (select '239.255.2.51' ip from dual)
select ip, to_number(regexp_substr(ip, '\d+', 1, 1)) * 16777216 +
           to_number(regexp_substr(ip, '\d+', 1, 2)) * 65536 +
           to_number(regexp_substr(ip, '\d+', 1, 3)) * 256 +
           to_number(regexp_substr(ip, '\d+', 1, 4)) n
  from addr;

IP                     N
------------- ----------      
239.255.2.51  4026466867 

Pro úplnost, zde je návod, jak jít jinou cestou.

with addr as (select 4026466867 n from dual)
select n, mod(trunc(n/16777216),256) ||'.'||
          mod(trunc(n/65536),   256) ||'.'||
          mod(trunc(n/256),     256) ||'.'||
          mod(n,                256) ip
from addr;

         N IP                                                                                                                                                                                                                                                             
---------- ------------
4026466867 239.255.2.51                                                                                                                                                                                                                                                     


  1. Jak načíst vícenásobný shodný řetězec pomocí regulárního výrazu

  2. Výjimka ve spojení s mysql přes jdbc

  3. Jak modelovat vztahy many-to-many v MongoDB (pro uživatele MySQL)

  4. Výchozí databáze MySQL