sql >> Database >  >> RDS >> Oracle

Oracle:een IPv4-adres converteren naar een nummer?

  • extraheer de vier octetten van het adres met regexp_substr.
  • reconstrueer de waarde door de octetten terug te schuiven naar hun oorspronkelijke posities.

De regexp kan relatief duur zijn, dus als je dit veel doet, zou je kunnen overwegen om de numerieke waarde in je tabel naast het IP-adres te cachen.

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 

Voor de volledigheid, hier is hoe je de andere kant op gaat.

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. vriendenlijst ophalen in mysql

  2. php getaddrinfo-fout:er is een niet-herstelbare fout opgetreden tijdens het opzoeken van een database.

  3. SELECTEER DISTINCT Werkt niet Android SQLite

  4. Statistieken SQL Server-databaseobjecten