8.16.4 LTDECODE
対象データと比較データを順次比較し,対象データの値が比較データの値未満となる場合は,対応する返却値を返します。対象データの値がすべての比較データの値未満とならない場合は,既定返却値を返します。
複数の比較データを指定した場合は,最初に対象データの値が比較データの値未満となる比較データに対応する返却値を返します。
- 〈この項の構成〉
(1) 指定形式
スカラ関数LTDECODE::=LTDECODE(対象データ,比較データ,返却値 〔,比較データ,返却値〕… 〔,既定返却値〕) 対象データ::=値式 比較データ::=値式 返却値::={値式|NULL} 既定返却値::={値式|NULL}
(2) 指定形式の説明
- 対象データ:
-
対象データを指定します。対象データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
- 比較データ:
-
比較データを指定します。比較データは,値式の形式で指定します。値式については,「7.21 値式」を参照してください。
- 返却値:
-
対象データの値が比較データの値未満となるときの返却値を指定します。返却値は,値式の形式で指定するか,またはNULLを指定します。値式については,「7.21 値式」を参照してください。
- 既定返却値:
-
対象データの値がすべての比較データの値以上となるときの返却値(既定返却値)を指定します。既定返却値は,値式の形式で指定するか,またはNULLを指定します。値式については,「7.21 値式」を参照してください。
なお,既定返却値の指定を省略した場合は,既定返却値としてNULLが指定されたと仮定されます。
(3) 規則
-
対象データ,比較データ,返却値,および既定返却値には,数データ,文字データ,または日時データを指定してください。
-
返却値,または既定返却値に指定するNULLは,ナル値を意味しています。
-
対象データおよび比較データには,比較できるデータ型を指定してください。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
ただし,対象データおよび比較データが,文字データまたは日時データである場合は,次の表を基にデータ型の組み合わせを指定してください。
表8‒64 スカラ関数LTDECODEでの,対象データおよび比較データに指定できるデータ型の組み合わせ 対象データ
比較データ
文字データ
日時データ
日付データの既定の入力表現である文字列定数
時刻データの既定の入力表現である文字列定数
時刻印データの既定の入力表現である文字列定数
そのほかのデータ
日付データ
時刻データ
時刻印データ
文字データ
日付データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻印データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
そのほかのデータ
○
○
○
○
×
×
×
日時データ
日付データ
○
×
○
×
○
×
○
時刻データ
×
○
×
×
×
○
×
時刻印データ
○
×
○
×
○
×
○
- (凡例)
-
○:指定できます。
×:指定できません。
-
返却値および既定返却値には,比較できるデータ型を指定してください(NULLの指定を除く)。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。
ただし,返却値および既定返却値が,文字データまたは日時データである場合は,次の表を基にデータ型の組み合わせを指定してください。
表8‒65 スカラ関数LTDECODEでの,返却値および既定返却値に指定できるデータ型の組み合わせ 返却値
既定返却値,または返却値※
文字データ
日時データ
日付データの既定の入力表現である文字列定数
時刻データの既定の入力表現である文字列定数
時刻印データの既定の入力表現である文字列定数
そのほかのデータ
日付データ
時刻データ
時刻印データ
文字データ
日付データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
時刻印データの既定の入力表現である文字列定数
○
○
○
○
×
×
×
そのほかのデータ
○
○
○
○
×
×
×
日時データ
日付データ
×
×
×
×
○
×
○
時刻データ
×
×
×
×
×
○
×
時刻印データ
×
×
×
×
○
×
○
- (凡例)
-
○:指定できます。
×:指定できません。
- 注※
-
返却値を複数指定していて,すべての返却値が文字データまたは日時データである場合,それぞれの返却値に指定できるデータ型の組み合わせは,「表8‒65 スカラ関数LTDECODEでの,返却値および既定返却値に指定できるデータ型の組み合わせ」のとおりになります。
-
対象データ,比較データ,返却値,および既定返却値は,最大256個まで指定できます。
-
実行結果のデータ型とデータ長は,返却値および既定返却値の結果のデータ型によって,「7.21.2 値式の結果のデータ型」で説明している規則に従って決まります。
なお,返却値および既定返却値の次に示す指定は,実行結果のデータ型とデータ長の決定に関係しません。
-
単独で指定した?パラメタ
-
NULL
-
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
比較データと返却値で1組となるように指定してください。比較データに対応する返却値は,その比較データの次に指定した値です。
-
対象データまたは比較データに,単独で指定した?パラメタ以外の値式を,少なくとも1つ指定してください。
-
返却値または既定返却値に,下記以外の値式を,少なくとも1つ指定してください。
-
単独で指定した?パラメタ
-
NULL
-
-
対象データに?パラメタを単独で指定した場合,対象データの?パラメタのデータ型には,最初の比較データのデータ型が仮定されます。ただし,最初の比較データに?パラメタを単独で指定した場合は,2つ目以降に指定した?パラメタの単独指定ではない比較データのデータ型が仮定されます。
-
比較データに?パラメタを単独で指定した場合,?パラメタのデータ型には,対象データのデータ型が仮定されます。ただし,対象データに?パラメタを単独で指定している場合は,最初の比較データのデータ型が仮定されます。また,最初の比較データに?パラメタを単独で指定している場合は,2つ目以降に指定した?パラメタの単独指定ではない比較データのデータ型が仮定されます。
仮定されるデータ型について,次の指定例を基に説明します。
-
指定例1
LTDECODE(?, 10, 'A', 20, 'C')
最初の比較データ(10)がINTEGER型のため,対象データの?パラメタのデータ型に,INTEGER型が仮定されます。
-
指定例2
LTDECODE(CURRENT_DATE, ?, 'A', DATE'2017/01/01', 'C')
対象データ(CURRENT_DATE)がDATE型のため,比較データの?パラメタのデータ型に,DATE型が仮定されます。
-
指定例3
LTDECODE(?, ?, 'A', 'B', 'C')
最初の比較データに?パラメタを単独で指定していて,2つ目に指定した比較データ('B')のデータ型がCHAR(1)となっています。そのため,対象データの?パラメタのデータ型,および比較データの?パラメタのデータ型に,それぞれCHAR(1)が仮定されます。
-
-
返却値または既定返却値に?パラメタを単独で指定した場合,?パラメタのデータ型には,このスカラ関数の実行結果のデータ型が仮定されます。
仮定されるデータ型について,次に示す指定例を基に説明します。
-
指定例1
LTDECODE("C1", 10, -1, 20, 0, 30, ?)
LTDECODEの実行結果のデータ型がINTEGER型になるため,返却値の?パラメタのデータ型にINTEGER型が仮定されます。
-
指定例2
LTDECODE("C1", DATE'2017/01/01', 'A', DATE'2017/02/01', ?, DATE'2017/02/01', 'BB')
LTDECODEの実行結果のデータ型がVARCHAR(2)になるため,返却値の?パラメタのデータ型にVARCHAR(2)が仮定されます。
-
指定例3
LTDECODE("C1", 10, 'A', 20, ?, ?)
LTDECODEの実行結果のデータ型がVARCHAR(1)になるため,返却値および既定返却値の?パラメタのデータ型に,それぞれVARCHAR(1)が仮定されます。
-
-
対象データの値が比較データの値未満となる(次に示す比較述語が真となる),比較データに対応する返却値を返します。
対象データ < 比較データ
-
対象データの値が比較データの値未満となる比較データが複数ある場合,最初の比較データに対応する返却値を返します。
(4) 例題
- 例題1
-
表T1のC1列に格納されている値を次のように変換します。そして,変換後の値をC2列に格納します。
-
0未満の値 → ナル値
-
1以上の値 → 2
SELECT "C1", LTDECODE("C1", 0, NULL, 1, "C1", 2) "C2" FROM "T1"
-
- 例題2
-
社員表(EMPLIST)の身長(HEIGHT)の値を次のように変換します。そして,変換後の値をHEIGHT2列に格納します。
-
150未満の値 → 150
-
190以上の値 → 190
SELECT "USERID", LTDECODE("HEIGHT", 150, 150, 190, "HEIGHT", 190) "HEIGHT2" FROM "EMPLIST"
-
- 例題3
-
社員表(EMPLIST)を検索して,次に示す値を求めます。
-
社員の年齢(AGE)を基に,世代別の社員数を求める
SELECT "GEN", COUNT("GEN") "GEN-NUM" FROM "EMPLIST" GROUP BY LTDECODE("AGE", 20, '20歳未満' , 30, '20代' , 40, '30代', '40歳以上') "GEN"
-