【ORACLE】DECODE関数の書き方:サンプル多数あり


ここではORACLEデータベースのSQLで、DECODE関数の基本的な書き方や使い方について紹介します。

DECODE関数を使うことで、条件分岐させて値を変換することが出来ます。

DECODE関数以外にもSELECT文のサンプルは↓で紹介していますので参考にしてください。
>>【SQL】SELECT文の書き方:サンプル多数あり

DECODE関数の基本構文

DECODE関数は、列の値によって条件分岐させて値を変換することが出来ます。

DECODE関数の基本文法は次の通りです。
列の値が、検索値1に一致するとき結果1を返します。検索値1に一致せず検索値2に一致する場合は結果2を返します、どの値にも一致しなかった場合は結果3を返します。

DECODE(列名,検索値1,結果1,検索値2,結果2, 結果3)

DECODE関数を使ったSQLサンプル

ここからは実際にDECODE関数を使ったSQLのサンプルを紹介します。

DECODE関数で条件分岐する方法

DECODE関数を使って条件分岐をさせることが出来ます。

次のSQLでは、TAB1テーブルのCOL1列の値が0の場合は’不合格’という文字列を、COL1列の値が1の場合は’合格’という文字列を、どの値とも一致しない場合は’対象外’という文字列を返します。

SELECT
    DECODE(col1,0,'不合格',1,'合格','対象外')
FROM
    tab1
;

DCODE関数で検索値を1つだけ指定する方法

DECODE関数で指定する検索値は1つ以上であれば、任意に指定することが出来ます。

次のSQLでは、COL1列の値が1の場合は’合格’という文字列を返し、それ以外の場合は’対象外’を返します。

SELECT
    DECODE(col1,1,'合格','対象外')
FROM
    tab1
;

DECODE関数でNULL値を置換する方法

DECODE関数を使ってNULL値を置換することが出来ます。

次のSQLでは、COL1列の値がNULL値のとき’未受験’、1のとき’受験済み’、どの値にも一致しない場合は’対象外’を返します。

SELECT
    DECODE(col1,NULL,'未受験',1,'受験済み','対象外')
FROM
    tab1
;

DCODE関数のほかにもNULL値を置換する方法があります。
詳しくは「【OracleSQL】列の値やNULL値を置き換える方法」で解説していますのでぜひ参考にしてください。

DECODE関数でレコードを並び替えする方法

DECODE関数は、ORDERBY句で指定することもできます。

次のSQLでは、COL1の値が’不合格’のときは0を、’合格’のときは1を、それ以外はNULLに置換して、昇順でソートしています。

SELECT
    *
FROM
    tab1
ORDER BY
    DECODE(col1,'不合格',0,'合格',1,NULL) ASC
;

データの並び替えについては他にも様々な指定の方法があります。
詳しくは「【OracleSQL】並び順を指定し、レコードを昇順・降順に並び替える方法」で解説していますのでぜひ参考にしてください。

DECODE関数とCASE式の違い

DECODE関数とCASE式はどちらも条件分岐で値を変換することができます。

DECODE関数とCASE式の大きな違いは、条件に比較演算子や式を使うことが出来ないことです。

例えば、DECODE関数の検索値に「 >= 100」と比較演算子を使うことは出来ません。かといって「COL1 >= 100」として式を検索値に指定することもできません。

比較演算子や式を使った条件分岐にはCASE式を使います。
CASE式については↓で紹介していますので参考にしてください。
>>【OracleSQL】CASE式の書き方:サンプル多数あり

まとめ

DECODE関数を使うことで、条件分岐させて値を変換することが出来ます。

DECODE関数はデータの並び替えにも使えますが、式や比較演算子を使うことが出来ません。CASE式との使い分けが必要です。

この他にも、SELECT文には様々な機能や使い方があります。
詳しくは「【SQL】SELECT文の書き方:サンプル多数あり」で解説していますのでぜひ参考にしてください。