sql >> データベース >  >> RDS >> Oracle

Oracle:IPv4アドレスを数値に変換しますか?

    • regexp_substrを使用してアドレスの4オクテットを抽出します。
    • オクテットを元の位置に戻すことで値を再構成します。

    正規表現は比較的高価である可能性があるため、これを頻繁に行う場合は、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 
    

    完全を期すために、別の方法を使用する方法を説明します。

    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. データベースで重複する文字列を検索する

    2. 最初のIDを挿入した後にcfloopが停止するのはなぜですか?

    3. ストアドプロシージャのパラメータリストで式(関数呼び出しなど)の結果を使用しますか?

    4. Oracle XML:スキップが存在しないノード