8.16.1 DECODE
対象データと比較データを順次比較し,一致した場合は対応する返却値を返します。対象データとすべての比較データが一致しない場合は,既定返却値を返します。
複数の比較データを指定した場合は,最初に一致した比較データに対応する返却値を返します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数DECODE::=DECODE(対象データ,比較データ,返却値 〔,比較データ,返却値〕… 〔,既定返却値〕) 対象データ::={値式|NULL} 比較データ::={値式|NULL} 返却値::={値式|NULL} 既定返却値::={値式|NULL}
(2) 指定形式の説明
- 対象データ:
-
対象データを指定します。対象データは,値式の形式で指定するか,またはNULLを指定します。値式については,「7.21 値式」を参照してください。
- 比較データ:
-
比較データを指定します。
指定規則を次に示します。
-
比較データは,値式の形式で指定するか,またはNULLを指定します。値式については,「7.21 値式」を参照してください。
-
最初に指定する比較データには,NULLを指定できません。
-
最初に指定する比較データには,?パラメタを単独で指定できません。
-
2つ目以降の比較データに?パラメタを単独で指定した場合,?パラメタのデータ型には,最初の比較データのデータ型が仮定されます。
-
- 返却値:
-
対象データが比較データと一致したときの返却値を指定します。
指定規則を次に示します。
-
返却値は,値式の形式で指定するか,またはNULLを指定します。値式については,「7.21 値式」を参照してください。
-
最初に指定する返却値には,NULLを指定できません。
-
最初に指定する返却値には,?パラメタを単独で指定できません。
-
2つ目以降の返却値に?パラメタを単独で指定した場合,?パラメタのデータ型には,最初の返却値のデータ型が仮定されます。
-
- 既定返却値:
-
対象データとすべての比較データが一致しないときの返却値(既定返却値)を指定します。既定返却値の指定を省略した場合は,既定返却値としてNULLが指定されたと仮定されます。
指定規則を次に示します。
-
既定返却値は,値式の形式で指定するか,またはNULLを指定します。値式については,「7.21 値式」を参照してください。
-
既定返却値に?パラメタを単独で指定した場合,?パラメタのデータ型には,最初の返却値のデータ型が仮定されます。
-
(3) 規則
-
対象データ,比較データ,返却値,および既定返却値には,数データ,文字データまたは日時データを指定してください。
-
対象データ,比較データ,返却値,または既定返却値に指定するNULLは,ナル値を意味しています。
-
対象データおよび比較データには,比較できるデータ型を指定してください(NULLの指定を除く)。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
ただし,対象データおよび比較データが,文字データまたは日時データである場合は,次の表を基にデータ型の組み合わせを指定してください。
表8‒62 スカラ関数DECODEでの,対象データおよび比較データに指定できるデータ型の組み合わせ 対象データ
比較データ
文字データ
日時データ
日付データの既定の入力表現である文字列定数
時刻データの既定の入力表現である文字列定数
時刻印データの既定の入力表現である文字列定数
そのほかのデータ
日付データ
時刻データ
時刻印データ
文字データ
日付データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻印データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
そのほかのデータ
○
○
○
○
×
×
×
日時データ
日付データ
○
×
○
×
○
×
○
時刻データ
×
○
×
×
×
○
×
時刻印データ
○
×
○
×
○
×
○
- (凡例)
-
○:指定できます。
×:指定できません。
-
返却値および既定返却値には,比較できるデータ型を指定してください(NULLの指定を除く)。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
ただし,返却値および既定返却値が,文字データまたは日時データである場合は,次の表を基にデータ型の組み合わせを指定してください。
表8‒63 スカラ関数DECODEでの,返却値および既定返却値に指定できるデータ型の組み合わせ 返却値
既定返却値,または返却値※
文字データ
日時データ
日付データの既定の入力表現である文字列定数
時刻データの既定の入力表現である文字列定数
時刻印データの既定の入力表現である文字列定数
そのほかのデータ
日付データ
時刻データ
時刻印データ
文字データ
日付データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻印データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
そのほかのデータ
○
○
○
○
×
×
×
日時データ
日付データ
×
×
×
×
○
×
○
時刻データ
×
×
×
×
×
○
×
時刻印データ
×
×
×
×
○
×
○
- (凡例)
-
○:指定できます。
×:指定できません。
- 注※
-
返却値を複数指定していて,すべての返却値が文字データまたは日時データである場合,それぞれの返却値に指定できるデータ型の組み合わせは,「表8‒63 スカラ関数DECODEでの,返却値および既定返却値に指定できるデータ型の組み合わせ」のとおりになります。
-
比較データおよび返却値の組は,127個まで指定できます。
-
実行結果のデータ型とデータ長は,返却値および既定返却値の結果のデータ型によって,「7.21.2 値式の結果のデータ型」で説明している規則に従って決まります。
なお,返却値および既定返却値のNULLの指定は,実行結果のデータ型とデータ長の決定に関係しません。
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
対象データがナル値の場合,比較データにNULLを指定したときに,対応する返却値が返されます。
(4) 例題
- 例題1
-
表T1のC2列に格納されている国名の略号を次のように変換します。
-
JPN → Japan
-
IND → India
-
ナル値 → NODATA
-
その他 → Other
SELECT "C1",DECODE("C2",'JPN','Japan','IND','India',NULL,'NODATA','Other') FROM "T1"
-
- 例題2
-
社員表(EMPLIST)を検索して次に示す値を求めます。
-
部署コード(SCODE)ごとに,所属する男性と女性の人数を求める
SELECT "SCODE",SUM(DECODE("SEX",'M',1,0)) AS "Men", SUM(DECODE("SEX",'F',1,0)) AS "Women" FROM "EMPLIST" GROUP BY "SCODE"
-