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

Oracle:Konverter en IPv4-adresse til et nummer?

  • udtræk de fire oktetter af adressen ved hjælp af regexp_substr.
  • rekonstituer værdien ved at flytte oktetterne tilbage til deres oprindelige positioner.

Regexp kan være relativt dyrt, så hvis du gør dette meget, kan du overveje at cache den numeriske værdi i din tabel sammen 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 

For fuldstændighedens skyld kan du se, hvordan du går den anden vej.

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. INITCAP() – Konverter til initial caps i PostgreSQL

  2. PDOException::(PDO::__construct():Uventet serverrespose under caching_sha2 auth:109) med MySQL 8 / PHP 7.2 / Laravel

  3. At iterere et ResultSet ved hjælp af JDBC for Oracle tager meget tid omkring 16s?

  4. Vælg alle, hvor feltet indeholder streng adskilt med komma