DECODEを使ってみる

ある値であればAを返すのように元の値を置き換えて返してくれる関数です。

 
DECODE(評価対象, 評価する値, 一致した場合の出力値, 一致しなかった場合の出力値)

例1

サンプルテーブル「select * from 社員マスタ」の結果


DECODE使ってSELECTしてみましょう。
SELECT DECODE(性別,'1','男性','女性') AS 性別, 社員名 from 社員マスタ


解説
DECODE部分を訳してみましょう。
性別列の値が1であれば「男性」を出力し、それ以外であれば「女性」を出力するという挙動になります。
この場合、万が一「性別」列がNULLであれば「女性」が出力されます。

これがスタンダードな使い方だと思います。

他の使い方

例1で、性別がNULLだった場合は女性になってしまうと書きました。
性別が1なら男性を出力、性別が0なら女性を出力、それ以外は「なし」を出力というように明確に記述すればそういうことはなくなります。

サンプルテーブル「select * from 社員マスタ」の結果

社員番号00004の佐々木可奈子さんの性別が抜けています。

DECODEを使ってみましょう。

SELECT DECODE(性別,'1','男性','0','女性','ない') AS 性別, 社員名 from 社員マスタ

このように記述することもできます。このように書くと以下のような動作をします。

性別            結果
0          →  「女性」
1          →  「男性」
NULL    →  「なし」

日本語で書くと「性別が1なら男性、性別が0なら女性、それ以外なら「なし」を出力」
このようにDECODEの中に何個も条件を増やして行くことができます。
最大何個まで大丈夫なのか調べてみてください。

関連するSQL

DECODEとCASE文はめっちゃ似てます。

同じような動作をさせることができますが、記述の仕方が違うので場合でうまく使い分けましょう。
厳密には全く同じ動作をするわけではないみたいですが。。。