Hitachi

Hitachi Advanced Data Binder SQLリファレンス


8.16.4 LTDECODE

対象データと比較データを順次比較し,対象データの値が比較データの値未満となる場合は,対応する返却値を返します。対象データの値がすべての比較データの値未満とならない場合は,既定返却値を返します。

複数の比較データを指定した場合は,最初に対象データの値が比較データの値未満となる比較データに対応する返却値を返します。

〈この項の構成〉

(1) 指定形式

スカラ関数LTDECODE::=LTDECODE(対象データ,比較データ,返却値
                        〔,比較データ,返却値〕…
                        〔,既定返却値〕)
 
  対象データ::=値式
  比較データ::=値式
  返却値::={値式|NULL}
  既定返却値::={値式|NULL}

(2) 指定形式の説明

対象データ

対象データを指定します。対象データは,値式の形式で指定します。値式については,「7.20 値式」を参照してください。

比較データ

比較データを指定します。比較データは,値式の形式で指定します。値式については,「7.20 値式」を参照してください。

返却値

対象データの値が比較データの値未満となるときの返却値を指定します。返却値は,値式の形式で指定するか,またはNULLを指定します。値式については,「7.20 値式」を参照してください。

既定返却値

対象データの値がすべての比較データの値以上となるときの返却値(既定返却値)を指定します。既定返却値は,値式の形式で指定するか,またはNULLを指定します。値式については,「7.20 値式」を参照してください。

なお,既定返却値の指定を省略した場合は,既定返却値としてNULLが指定されたと仮定されます。

(3) 規則

  1. 対象データ比較データ返却値,および既定返却値には,数データ,文字データ,または日時データを指定してください。

  2. 返却値,または既定返却値に指定するNULLは,ナル値を意味しています。

  3. 対象データおよび比較データには,比較できるデータ型を指定してください。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。

    ただし,対象データおよび比較データが,文字データまたは日時データである場合は,次の表を基にデータ型の組み合わせを指定してください。

    表8‒64 スカラ関数LTDECODEでの,対象データおよび比較データに指定できるデータ型の組み合わせ

    対象データ

    比較データ

    文字データ

    日時データ

    日付データの既定の入力表現である文字列定数

    時刻データの既定の入力表現である文字列定数

    時刻印データの既定の入力表現である文字列定数

    そのほかのデータ

    日付データ

    時刻データ

    時刻印データ

    文字データ

    日付データの既定の入力表現である文字列定数

    ×

    ×

    ×

    時刻データの既定の入力表現である文字列定数

    ×

    ×

    ×

    時刻印データの既定の入力表現である文字列定数

    ×

    ×

    ×

    そのほかのデータ

    ×

    ×

    ×

    日時データ

    日付データ

    ×

    ×

    ×

    時刻データ

    ×

    ×

    ×

    ×

    ×

    時刻印データ

    ×

    ×

    ×

    (凡例)

    ○:指定できます。

    ×:指定できません。

  4. 返却値および既定返却値には,比較できるデータ型を指定してください(NULLの指定を除く)。比較できるデータ型については,「6.2.2 変換,代入,比較できるデータ型」の「(1) 比較できるデータ型」を参照してください。

    ただし,返却値および既定返却値が,文字データまたは日時データである場合は,次の表を基にデータ型の組み合わせを指定してください。

    表8‒65 スカラ関数LTDECODEでの,返却値および既定返却値に指定できるデータ型の組み合わせ

    返却値

    既定返却値,または返却値

    文字データ

    日時データ

    日付データの既定の入力表現である文字列定数

    時刻データの既定の入力表現である文字列定数

    時刻印データの既定の入力表現である文字列定数

    そのほかのデータ

    日付データ

    時刻データ

    時刻印データ

    文字データ

    日付データの既定の入力表現である文字列定数

    ×

    ×

    ×

    時刻データの既定の入力表現である文字列定数

    ×

    ×

    ×

    時刻印データの既定の入力表現である文字列定数

    ×

    ×

    ×

    そのほかのデータ

    ×

    ×

    ×

    日時データ

    日付データ

    ×

    ×

    ×

    ×

    ×

    時刻データ

    ×

    ×

    ×

    ×

    ×

    ×

    時刻印データ

    ×

    ×

    ×

    ×

    ×

    (凡例)

    ○:指定できます。

    ×:指定できません。

    注※

    返却値を複数指定していて,すべての返却値が文字データまたは日時データである場合,それぞれの返却値に指定できるデータ型の組み合わせは,「表8‒65 スカラ関数LTDECODEでの,返却値および既定返却値に指定できるデータ型の組み合わせ」のとおりになります。

  5. 対象データ比較データ返却値,および既定返却値は,最大256個まで指定できます。

  6. 実行結果のデータ型とデータ長は,返却値および既定返却値の結果のデータ型によって,「7.20.2 値式の結果のデータ型」で説明している規則に従って決まります。

    なお,返却値および既定返却値の次に示す指定は,実行結果のデータ型とデータ長の決定に関係しません。

    • 単独で指定した?パラメタ

    • NULL

  7. 実行結果の値は,非ナル値制約なし(ナル値を許す)となります。

  8. 比較データ返却値で1組となるように指定してください。比較データに対応する返却値は,その比較データの次に指定した値です。

  9. 対象データまたは比較データに,単独で指定した?パラメタ以外の値式を,少なくとも1つ指定してください。

  10. 返却値または既定返却値に,下記以外の値式を,少なくとも1つ指定してください。

    • 単独で指定した?パラメタ

    • NULL

  11. 対象データに?パラメタを単独で指定した場合,対象データの?パラメタのデータ型には,最初の比較データのデータ型が仮定されます。ただし,最初の比較データに?パラメタを単独で指定した場合は,2つ目以降に指定した?パラメタの単独指定ではない比較データのデータ型が仮定されます。

  12. 比較データに?パラメタを単独で指定した場合,?パラメタのデータ型には,対象データのデータ型が仮定されます。ただし,対象データに?パラメタを単独で指定している場合は,最初の比較データのデータ型が仮定されます。また,最初の比較データに?パラメタを単独で指定している場合は,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)が仮定されます。

  13. 返却値または既定返却値に?パラメタを単独で指定した場合,?パラメタのデータ型には,このスカラ関数の実行結果のデータ型が仮定されます。

    仮定されるデータ型について,次に示す指定例を基に説明します。

    • 指定例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)が仮定されます。

  14. 対象データの値が比較データの値未満となる(次に示す比較述語が真となる),比較データに対応する返却値を返します。

    対象データ < 比較データ
  15. 対象データの値が比較データの値未満となる比較データが複数ある場合,最初の比較データに対応する返却値を返します。

(4) 例題

例題1

T1C1列に格納されている値を次のように変換します。そして,変換後の値を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"

[図データ]