sql >> Base de Datos >  >> RDS >> Oracle

Oracle:¿Convertir una dirección IPv4 en un número?

  • extrae los cuatro octetos de la dirección usando regexp_substr.
  • reconstruya el valor volviendo a colocar los octetos en sus posiciones originales.

La expresión regular puede ser relativamente costosa, por lo que si hace esto con frecuencia, podría considerar almacenar en caché el valor numérico en su tabla junto con la dirección 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 

Para completar, aquí se explica cómo hacerlo en sentido contrario.

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