SQLのNVL2はOracle独自のNULL比較関数 任意値を返すことができるのが特徴
  • facebookページ
  • twitterページ
  • 2020.05.30

    SQLのNVL2はOracle独自のNULL比較関数 任意値を返すことができるのが特徴

    SQLのNVL2関数についてまとめています。

    NVL2はOracleのNULL比較関数 NULLの場合にNULL以外を返り値として返すことが可能

    まずはnvlの実行結果を見てみましょう。第一引数がNULLなら第二引数を、NULL以外なら第一引数を返します。

    NVL2は、指定した値がNULLだった場合とNULL以外の場合で返す値を変えることができる関数です。第一引数がNULL以外なら第二引数を、NULLなら第三引数を返します。

    NVL2はCASE式で置き換えが可能

    NVL2はOracleの独自拡張です。MySQLなど他のRDBMSに移植する場合は、CASE式で置き換えが可能です。

    NVL2は比較値以外の値を返すことが可能

    以下のSQLは、データベースHR.employeesからmanager_idがNULLの場合は1を、NULL以外なら0を取得しています。

    outer joinの場合対応する値がなくてNULL値になっているカラムを置き換えるには、以下の様にします。以下は、manager_idがNULLの場合はN/A、NULL以外の場合はavailableを返すサンプルです。

    outer join先のSCOTT.deptテーブルのdeptnoがNULLの場合はN/Aを、NULL以外の場合はavailableを取得します。

    NVL2とCOALESCEの違い COALSCEは複数の引数指定が可能

    Oracleでは、NVL2の代わりにcoalesce関数を使うことも可能です。COALSCEは複数の引数を指定することができ、引数1がNULLだったら引数2を比較、引数2がNULLだったら、引数3を比較…と指定した引数を順番にNULL比較していきます。

    比較した結果、NULL以外が現れた場合はその値を、全てNULLだった場合はNULLを返します。

    NVL2の場合は、比較する値は一つであることと、比較した値以外を返すことができる点が異なります。NVL、NVL2はOracleの独自関数ですが、COALSCEはMySQLなどの他のデータベース管理システムでも利用可能です。

    下記のSQLは、年ごとの社員の年収を集計するSQLです。年収がNULLの場合はCOALESCEで0に置き換えています。

    【関連記事】
    SQL coalesce 値がNULLの場合の代替値を返す 簡易版のNVLやNULLIFが使えるDBもあり

    まとめ

    ポテパンダの一言メモ
    • NVL2は、NULL比較してNULL以外の値を返すOracle独自の関数
    • 他のRDBMSでは、CASE文で置き換えが可能
    • NULL比較をおこなうCOALSCEとは指定できる引数の数と任意の値を返せる点が異なる


    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE