このSQLチュートリアルでは、OracleのNVL2関数の説明と例を示します
NVL2関数は入れ子関数です。最初の印象を調べ、最初の印象がnullでない場合、NVL2関数は2番目の式を返します。第一印象がnullの場合、3番目の式を返します。
expr1 :nullを含む可能性のあるソース値または式です。列名、列名の関数を指定できます
expr2 :これは、expr1がnullでない場合に返される式の値です
expr3 :これは、expr1がnullの場合に返される式の値です
引数expr1は任意のデータ型を持つことができます。引数expr2およびexpr3は、LONG以外の任意のデータ型を持つことができます。
SQL> select nvl2(user_name,1,2) from apps.fnd_user where rownum < 5; NVL2(USER_NAME,1,2) ------------------- 1 1 1 1 SQL> select nvl2(end_date,1,2) from apps.fnd_user where rownum < 5; NVL2(END_DATE,1,2) ------------------ 1 2 1 1>
expr2とexpr3のデータ型が異なる場合:
expr2が文字データの場合、expr3がヌル定数でない限り、OracleDatabaseはexpr3をexpr2のデータ型に変換してから比較します。その場合、データ型の変換は必要ありません。 Oracleは、expr2の文字セットでVARCHAR2を返します。
expr2が数値の場合、Oracleは、数値の優先順位が最も高い引数を判別し、他の引数をそのデータ型に暗黙的に変換して、そのデータ型を返します。
expr2が文字データでない限り、戻り型のデータ型は常にexpr2のデータ型と同じです。文字データの場合、戻り値は常にvarchar2です
SQL> select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5; select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5 * ERROR at line 1: ORA-01722: invalid number SQL> select nvl2(end_date,'a',1) from apps.fnd_user where rownum < 5; N - a 1 a a
使用法
SELECT last_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) income FROM employees WHERE last_name like 'B%' ORDER BY last_name;
関連記事
SQLの単一行関数
OracleのNULLIF関数
Oracleのステートメントの更新
Oracleの合体関数
OracleLISTAGG関数
oracle日付関数