sql >> Databasteknik >  >> RDS >> Oracle

Oracle:Konvertera en IPv4-adress till ett nummer?

  • extrahera adressens fyra oktetter med regexp_substr.
  • rekonstruera värdet genom att flytta tillbaka oktetterna till deras ursprungliga positioner.

Regexp kan vara relativt dyrt, så om du gör det här mycket kan du överväga att cachelagra det numeriska värdet i tabellen tillsammans med IP-adressen.

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 

För fullständighetens skull, så här går du åt andra hållet.

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. Få data för ett specifikt tidsintervall

  2. SQL-villkor på fönsterfunktion

  3. Metod för att lokalisera närmaste lng/lat-platser utan en radie på 15 mil?

  4. MYSQL-fråga WHERE IN vs OR