Oracle関数のDECODEとNVLについて
すっかりJava開発案件から離れるとOracleを使わないパターンが多いので、
昔のJavaソースを見て出てくると面食らってしまったので少し調べた内容を
メモしておく(Φω|
[使い方]
1. DECODE
[syntax]
DECODE(column_name,search_value1,result1,search_value2,result2,result3);
1-1.条件分岐
(ex)table1のcol1列の値が0->'不合格',値が1->'合格',それ以外->'対象外'
select DECODE(col1,0,'不合格',1,'合格','対象外') from table1;
1-2.検索条件を1つだけ指定
(ex)table1のcol1列の値が1->'合格',それ以外->'対象外'
select DECODE(col1,1,'合格','対象外') from table1;
1-3.NULL値変換
(ex)table1のcol1列の値がNULL->'未受験',1->'受験済み',それ以外->'対象外'
select DECODE(col1,NULL,'未受験',1,'受験済み','対象外') from table1;
1-4.レコードの並び替え
(ex)table1のcol1列の値が'不合格'->0,'合格'->1,それ以外->NULLで昇順ソート
select * from table1 order by DECODE(col1,'不合格',0,'合格',1,NULL) ASC;
2. NVL
[syntax]
NVL(expr1,expr2);
※expr1: NULLかどうか調べる値を指定。
※expr2: expr1がNULLの場合に返却するexpr1と同じデータ型の値を指定。
expr1がNULLでない場合、expr1を返却し、
expr1がNULL -> expr2を返却。
(ex)社員テーブル(employee)から歩合給(comm)を取得
select NVL(comm,0) from employee;
[参考サイト]