Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle :Convertir une adresse IPv4 en nombre ?

  • extraire les quatre octets de l'adresse à l'aide de regexp_substr.
  • reconstituer la valeur en replaçant les octets à leur position d'origine.

L'expression régulière peut être relativement coûteuse, donc si vous le faites souvent, vous pouvez envisager de mettre en cache la valeur numérique dans votre table à côté de l'adresse 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 

Pour être complet, voici comment procéder dans l'autre sens.

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