OracleのDECODEのサンプルです。
目次
サンプル | DECODEとは |
select句で使用する | |
where句で使用する |
DECODEとは
DECODE(列名,値1,値1の時に返す値,値2,値2の時に返す値・・・,それ以外に返す値) |
- テーブルの列にある値を読み取り、その値に応じて指定した値を返します。if文と同じです。
例:ある列の値が、"red"のときは"赤"を返し、"blue"のときは"青"を返し、それ以外のときは、"その他"を返す。 - 判定する値は、1つだけでなく、複数可能です。
- SQL標準のcaseも同じことができます。
→caseは他DBでも使用できかつより複雑なこともできるのでcaseを使用します。 - 以下は、OracleのDECODEのリンクです。
https://docs.oracle.com/cd/E16662_01/doc/timesten.1121/b56051/ttsql221.htm
select句で使用する
以下のテーブルがあるとします。
id | name |
---|---|
1 | red |
2 | blue |
3 | grey |
上記テーブルに対してdecodeを使用します。
select decode(name,'red','赤','blue','青','その他') as test
from color;
1行目は、decodeで、colorテーブルのname列の値がredであれば「赤」、blueであれば「青」、それ以外の値であれば「その他」を返します。
結果は、以下のとおりです。
test |
---|
赤 |
青 |
その他 |
where句で使用する
decodeはwhere句でも使用できます。
以下のテーブルがあるとします。
id | name |
---|---|
1 | red |
2 | blue |
3 | grey |
例1
上記テーブルに対してdecodeを使用します。
select * from color
where name = decode(name,'red','red','orange');
2行目は、decodeでname列の値がredのときはred、それ以外のときは、orangeで検索します。
結果は、以下のとおりです。
id | name |
---|---|
1 | red |
nameのredが一致した行が表示されます。以下のSQLと同じです。
select * from color
where name in ('red','orange');
例2
今度は、decodeの最後の指定する値に一致する値をセットします。
以下のテーブルがあるとします。
id | name |
---|---|
1 | red |
2 | blue |
3 | grey |
上記テーブルに対してdecodeを使用します。
select * from color
where name = decode(name,'red','red','blue');
2行目は、decodeでname列の値がredのときはred、それ以外のときは、blueで検索します。
結果は、以下のとおりです。
id | name |
---|---|
1 | red |
2 | blue |
nameのredとblueが一致した行が表示されます。以下のSQLと同じです。
select * from color
where name in ('red','blue');
関連の記事