SQL NVL 関数の使い方とNVL2との違い

NVLとは「Null Value Logic」という意味で、NULLを別の値に変換するOracle SQL関数である。NVL2はNULL以外の値も別の値に変換できる。NVLやNVL2はOracle独自の関数であるが、MySQLやPostgreSQL、SQL Serverでも COALESCE 関数やCASE式を使うことにより、同様の処理が行える。

NVL
DBMS NVL
MySQL
Oracle
PostgreSQL
SQL Server

NVLの使い方

NVLとはNull Value Logicという意味で、NULLを別の値に変換するSQL関数である。

NVL(expr1, expr2)

NVLには次の引数を指定する。

expr1

NULLかどうかを調べる値を指定する。

expr2

expr1がNULLの場合に返す値を指定する。expr1と同じデータ型を指定する。expr1と異なるデータ型を指定した場合はエラーになる。

expr1がNULLでない場合はexpr1を返す。expr1がNULLの場合はexpr2を返す。

社員表(emp)から歩合給(comm)を取得する。歩合給がNULLの場合は0とする。

SELECT NVL(comm, 0) FROM emp

NVL2との違い

NVLは第1引数がNULLの場合のみ、別の値に変換できる。NVL2を使うと、第1引数がNULL以外のときも別の値に変換できる。

NVL2
DBMS NVL2
MySQL
Oracle
PostgreSQL
SQL Server

expr1がNULLでない場合はexpr2を返す。expr1がNULLの場合はexpr3を返す。

NVL2(expr1, expr2, expr3)

NVL2には次の引数を指定する。

expr1

NULLかどうかを調べる値を指定する。

expr2

expr1がNULL以外の場合に返す値を指定する。expr1と同じデータ型を指定する。expr1と異なるデータ型を指定した場合はエラーになる。

expr3

expr1がNULLの場合に返す値を指定する。expr1と同じデータ型を指定する。expr1と異なるデータ型を指定した場合はエラーになる。

歩合給(comm)がNULL以外のときは2倍した値、NULLのときは0を返す例を示す。

SELECT NVL(comm, comm * 2, 0) FROM emp

COALESCE

NVLはOracleデータベース独自のSQL関数であり、MySQLPostgreSQLSQL Serverでは使えない。NULLを別の値に変換する一般的な方法として、COALESCE関数を使うことができる。

COALESCE
DBMS COALESCE
MySQL
Oracle
PostgreSQL
SQL Server

歩合給(comm)がNULLであれば0に変換するSQLは、COALESCEを使って次のようにできる。

SELECT COALESCE(comm, 0) FROM emp

ただし、NVL2のようにNULL以外の値は変換できない。

CASE

NVLやNVL2はOracleデータベース独自のSQL関数であり、MySQLPostgreSQLSQL Serverでは使えない。NULLを別の値に変換する一般的な方法として、CASE式を使うことができる。

CASE
DBMS CASE
MySQL
Oracle
PostgreSQL
SQL Server

関連記事

NVLやNVL2に関連するものとして、次のSQL関数がある。

SQL関数 説明
DECODE 評価式が条件値に一致するときに任意の値を返す