NVLとは「Null Value Logic」という意味で、NULLを別の値に変換するOracle SQL関数である。NVL2はNULL以外の値も別の値に変換できる。NVLやNVL2はOracle独自の関数であるが、MySQLやPostgreSQL、SQL Serverでも COALESCE 関数やCASE式を使うことにより、同様の処理が行える。
DBMS | NVL |
---|---|
MySQL | ✗ |
Oracle | ✓ |
PostgreSQL | ✗ |
SQL Server | ✗ |
NVLとはNull Value Logicという意味で、NULLを別の値に変換するSQL関数である。
NVL(expr1, expr2)
NVLには次の引数を指定する。
NULLかどうかを調べる値を指定する。
expr1がNULLの場合に返す値を指定する。expr1と同じデータ型を指定する。expr1と異なるデータ型を指定した場合はエラーになる。
expr1がNULLでない場合はexpr1を返す。expr1がNULLの場合はexpr2を返す。
社員表(emp)から歩合給(comm)を取得する。歩合給がNULLの場合は0とする。
SELECT NVL(comm, 0) FROM emp
NVLは第1引数がNULLの場合のみ、別の値に変換できる。NVL2を使うと、第1引数がNULL以外のときも別の値に変換できる。
DBMS | NVL2 |
---|---|
MySQL | ✗ |
Oracle | ✓ |
PostgreSQL | ✗ |
SQL Server | ✗ |
expr1がNULLでない場合はexpr2を返す。expr1がNULLの場合はexpr3を返す。
NVL2(expr1, expr2, expr3)
NVL2には次の引数を指定する。
NULLかどうかを調べる値を指定する。
expr1がNULL以外の場合に返す値を指定する。expr1と同じデータ型を指定する。expr1と異なるデータ型を指定した場合はエラーになる。
expr1がNULLの場合に返す値を指定する。expr1と同じデータ型を指定する。expr1と異なるデータ型を指定した場合はエラーになる。
歩合給(comm)がNULL以外のときは2倍した値、NULLのときは0を返す例を示す。
SELECT NVL(comm, comm * 2, 0) FROM emp
NVLはOracleデータベース独自のSQL関数であり、MySQLやPostgreSQL、SQL Serverでは使えない。NULLを別の値に変換する一般的な方法として、COALESCE関数を使うことができる。
DBMS | COALESCE |
---|---|
MySQL | ✓ |
Oracle | ✓ |
PostgreSQL | ✓ |
SQL Server | ✓ |
歩合給(comm)がNULLであれば0に変換するSQLは、COALESCEを使って次のようにできる。
SELECT COALESCE(comm, 0) FROM emp
ただし、NVL2のようにNULL以外の値は変換できない。
NVLやNVL2はOracleデータベース独自のSQL関数であり、MySQLやPostgreSQL、SQL Serverでは使えない。NULLを別の値に変換する一般的な方法として、CASE式を使うことができる。
DBMS | CASE |
---|---|
MySQL | ✓ |
Oracle | ✓ |
PostgreSQL | ✓ |
SQL Server | ✓ |
NVLやNVL2に関連するものとして、次のSQL関数がある。
SQL関数 | 説明 |
---|---|
DECODE | 評価式が条件値に一致するときに任意の値を返す |