haiju's 開発メモ

開発に必要な情報を自分用にメモ

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;

[参考サイト]

oreno-it.info

itref.fc2web.com

sql-oracle.com

www.shift-the-oracle.com

itref.fc2web.com

itsakura.com