このSQLチュートリアルでは、OracleのNULLIF関数の説明と例を示します
。NULLIF関数は非常に便利な関数です。2つの値を比較し、値が同じ場合はnullを返し、それ以外の場合は最初の値を返します
expr1 :expr2と比較されるのはソース値または式です
expr2 :expr1と比較されるソース値でもあります
最初の値にリテラルNULLを指定することはできません
SQL> select nullif(NULL,1) from dual;
select nullif(NULL,1) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CHAR
使用法と例
SQL> select nullif(1,1) from dual; NULLIF(1,1)
----------- SQL> select nullif(1,2) from dual; NULLIF(1,2)
-----------
1
重要な注意
1)このステートメントはcaseステートメントと非常によく似ており、
CASE WHEN expr1 =expr2 THEN NULL ELSE expr1 END
2)両方の引数が数値データ型の場合、Oracle Databaseは数値の優先順位が高い引数を判別し、もう一方の引数をそのデータ型に暗黙的に変換して、そのデータ型を返します。引数が数値でない場合は、同じoracleデータ型である必要があります。そうでない場合、Oracleはエラーを返します。
SQL> select nullif(1,'apple') from dual;
select nullif(1,'apple') from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got CHARSQL> select nullif('apple',1) from dual;
select nullif('apple',1) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
その他の例
select first_name, length(first_name),last_name, length(last_name), nullif(length(first_name),length(last_name)) from emp; SELECT NULLIF('Sunday', 'Friday') AS check FROM dual;
NULLIF関数の別のユースケースは、雇用されてから転職した従業員を一覧表示する場合です。これは、employeesテーブルの現在のjob_idとは異なるjob_historyテーブルのjob_idで示されます。
select emp_name,nullif(b.job_id,a.job_id) old_job from employees a, job_history b where a.emp_id=b.emp_id;
Nullif関数に関するFAQ
除算の分母がゼロの場合、ゼロ除算エラーが発生します。以下のようにNULLIF関数を使用することで回避できます。
select100/ nullif(0,0)from dual;
ここで、両方の値が等しいため、Nullifはnullを返し、式全体はnullを返します。エラーの。実際の列を処理するときに使用できる方法は次のとおりです。
expからcol2/nullif(col1,0)を選択します。
関連記事
oracleのステートメントの更新
OracleのNVL2関数
OracleのNVL関数
Oracleの合体関数
sqlの単一行関数
Oracleのテーブルステートメントから削除
外部リソース
NULLIFのOracleリファレンス