NOT NULL or NULL で置換、2つが同じ値なら NULL を戻す

syntax

NVL2 ( expr , ret_expr1 , ret_expr2 ) Oracle 9i
return [ 第一引数の型、NULL、または、優先順位の高い数値型 ]

parameter

expr
ret_expr1
ret_expr2
NULL を設定可能な式(数値式、文字列式、日付式、etc)

return

  • expr が NULL 以外なら ret_expr1 の値
  • expr が NULL なら ret_expr2 の値

avail

  • SQL、埋め込みSQL で使用可能、PL/SQL に組み込まれていない。(Oracle 10g R2 時点)

syntax

NULLIF ( not_null_expr , expr ) Oracle 9i
return [ 第一引数、NULL、または、優先順位の高い数値型 ]

parameter

not_null_exprNULL を含まない式(数値式、文字列式、日付式、etc)
exprNULL を設定可能な式(数値式、文字列式、日付式、etc)

return

  • 2つの式が同じ値なら NULL 、異なるなら not_null_expr

avail

  • SQL および PL/SQL の両方で使用可能。

NVL2 関数の内容 Oracle 9i

NULL を設定可能な式 expr が NULL 以外なら ret_expr1 を戻し、NULL なら ret_expr2を戻す。
数値型を使用した場合には優先順位の一番高い型に変換してから評価する。BINARY_DOUBLE > BINARY_FLOAT > NUMBER ⇒ 数値型の優先順位

内部で DECODE にでも変換されているのだろうか… PL/SQL には組み込まれていない。

NULLIF 関数の内容   Oracle 9i

第1引数の not_null_expr と第2引数の expr が同じ値なら NULL を戻す。異なる場合には not_null_expr を戻す。

NVL2 使用例

SQL> set null '<NULL>'
SQL> select NVL2(null, null, null) null_nvl from dual;
 
NULL_NVL
--------------------
<NULL>
 
SQL> select NVL2(null, sysdate, date '2000-01-01') null_date from dual;
 
NULL_DATE
--------------------
2000-01-01 00:00:00
 
SQL> select NVL2(chr(0), 'not null', 'null string') null_chr from dual;
 
NULL_CHR
--------------------
not null

SQL*Plus の NULL 表示

NULLIF 使用例

SQL> select NULLIF(1,1d), NULLIF(1,2) from dual;
 
NULLIF(1,1D) NULLIF(1,2)
------------ -----------
<NULL>                 1
SQL> select NULLIF('ABC', 'ABC   ') from dual;
 
NULLIF
------
<NULL>

'ABC' と 'ABC ' が同じ値となる理由 ⇒ 空白埋め比較セマンティクス

SQL> select NULLIF(null, null) from dual;
                   *
行1でエラーが発生しました。:
ORA-00932: データ型が一致しません: -が予想されましたがCHARです。

行間で重複値を除くのに使用する例

select NULLIF(colname, lag(colname)) from tablename

関連:カラム・レコード単位で連続する値を省略・削除する

 


SQL 関数 - NVL2,NULLIF 関連

 
アルファベット別 関数一覧 ショートカット
ABCDEFG
HILMNOP
RSTUVWX
日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle Web セミナー