言葉のさんぽ道

~気ままに写真とゲームの話題が更新されるはず~

Oracle DECODE関数で論理和・論理積

OracleのSELECT句で条件式を使いたい時はDECODE関数を使いますよね。↓みたいな感じで。

条件式 : 性別フラグが1なら男、違うなら女
SQL : SELECT DECODE(sex, '1', '男', '女') sex_name FROM people

で、たまに条件式で論理和(A=C OR B=C とか)・論理積(A=C AND B=C とか)を使いたい時がある。というか使いたい時が直近であったのでここにメモ。解決方法としてはDECODEの中にDECODEを入れるという荒業だ。

条件式 : 性別フラグが1で且つ好きな性別が1ならウホッ、違うなら男、それ以外は女
SQL : SELECT DECODE(sex, '1', DECODE(like_sex, '1', 'ウホッ', '男'), '女') sex_name FROM people

こんな感じ。SQLとしては見栄えが悪いのでオススメはしない。素直にCASE式で華麗に書いた方が良いかも。その際はNULL値の扱いにご注意を。


以上!