Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle:convertire un indirizzo IPv4 in un numero?

  • estraete i quattro ottetti dell'indirizzo usando regexp_substr.
  • ricostituire il valore riportando gli ottetti nelle loro posizioni originali.

L'espressione regolare potrebbe essere relativamente costosa, quindi se lo fai spesso potresti considerare di memorizzare nella cache il valore numerico nella tabella insieme all'indirizzo IP.

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 

Per completezza, ecco come andare dall'altra parte.

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