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 | 評価式が条件値に一致するときに任意の値を返す |