Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle:Umwandlung einer IPv4-Adresse in eine Zahl?

  • extrahieren Sie die vier Oktetts der Adresse mit regexp_substr.
  • Stellen Sie den Wert wieder her, indem Sie die Oktette zurück an ihre ursprünglichen Positionen verschieben.

Der reguläre Ausdruck kann relativ teuer sein, wenn Sie dies also häufig tun, sollten Sie in Betracht ziehen, den numerischen Wert in Ihrer Tabelle neben der IP-Adresse zwischenzuspeichern.

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 

Der Vollständigkeit halber hier, wie man in die andere Richtung vorgeht.

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