2.25 CAST指定

<この節の構成>
(1) 機能
(2) 形式
(3) 規則
(4) 結果のデータ型ごとの変換規則

(1) 機能

値式のデータを,指定したデータ型に変換します。

(2) 形式

 CAST指定::=CAST({値式|NULL} AS データ型)

(3) 規則

  1. 値式には,次のデータ型は指定できません。
    • BLOB
    • 定義長が32,001バイト以上のBINARY
    • 抽象データ型
  2. AS データ型には,次のデータ型は指定できません。
    • BLOB
      ただし,CAST(NULL AS BLOB)は指定できます。
    • 長さが32,001バイト以上のBINARY
      ただし,CAST(NULL AS BINARY(n))は指定できます。nは32,001以上のバイト数です。
    • BOOLEAN
    • 抽象データ型
  3. 結果の値は,非ナル値制約なし(ナル値を許します)になります。
  4. 値式にNULLを指定するか,又は値式の結果がナル値の場合,結果の値はナル値になります。
  5. 実長0バイト,又は実長0文字のデータを値式に指定した場合,文字型への変換はデータ変換の規則に従います。文字型以外への変換では,エラーになります。
  6. 値式に埋込み変数又は?パラメタを単独で指定した場合,埋込み変数又は?パラメタのデータ型は,AS データ型に指定したデータ型が仮定されます。
  7. 値式に繰返し列を指定する場合,添字を指定してください。ただし,添字にANYは指定できません。
  8. AS データ型には,値式に指定するデータ型と型変換できるデータ型を指定してください。データ型の変換可否を次の表に示します。

    表2-106 値式の結果のデータ型とAS データ型との,データ型の変換可否(1/2)

    値式の結果のデータ型AS データ型
    数データ文字データ(文字集合)各国文字データ混在文字データ
    真数概数
    INTEGER,SMALLINT,DECIMALFLOAT,SMALLFLTCHAR,VARCHARNCHAR,NVARCHARMCHAR,MVARCHAR
    DFEKU16
    数データ真数INTEGER,SMALLINT,DECIMAL×
    概数FLOAT,SMALLFLT×
    文字データ(文字集合)CHAR,VARCHAR(DF)※2×
    CHAR,VARCHAR(EK)※2×××
    CHAR,VARCHAR(U16)××
    各国文字データNCHAR,NVARCHAR××××××
    混在文字データMCHAR,MVARCHAR××
    論理データBOOLEAN×××
    日付データDATE××
    ※1

    ※1

    ※1
    ×※1
    時刻データTIME××
    ※1

    ※1

    ※1
    ×※1
    時刻印データTIMESTAMP××
    ※1

    ※1

    ※1
    ×※1
    日間隔データINTERVAL YEAR TO DAY××××××
    時間隔データINTERVAL HOUR TO SECOND××××××
    バイナリデータBINARY××××
    (凡例)
    ○:データ変換ができます。
    ×:データ変換ができません。
    DF:既定文字集合
    EK:EBCDIK
    U16:UTF16
    注※1
    AS データ型に指定した長さが,次に示す長さ以上の場合は変換できます。
    ・値式の結果の文字集合がUTF16以外の場合
    DATEの場合:
      10バイト
    TIMEの場合:
      8バイト
    TIMESTAMP(p)の場合:
      p=0のときは19バイト(ピリオドは付きません)
      p>0のときは20+↓(p+1)/2↓×2バイト
    ・値式の結果の文字集合がUTF16の場合
    DATEの場合:
      20バイト
    TIMEの場合:
      16バイト
    TIMESTAMP(p)の場合:
      p=0のときは38バイト(ピリオドは付きません)
      p>0のときは40+↓(p+1)/2↓×4バイト
    ASデータ型に指定した長さが,上記の長さより短い場合は変換できません。
    固定長の文字データ型に変換する場合で,ASデータ型に指定した長さが上記の長さより長い場合は,左詰めにして,末尾をその文字集合の空白で埋めます。
    注※2
    既定文字集合のSJISコードをJIS8コードの1バイトコードとみなして,JIS8コードとEBCDIKコードとの間の変換を行います。
    文字コード変換規則については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。

    表2-107 値式の結果のデータ型とAS データ型との,データ型の変換可否(2/2)

    値式の結果のデータ型AS データ型
    日付データ時刻データ時刻印データ日間隔データ時間隔データバイナリデータ
    DATETIMETIMESTAMPINTERVAL YEAR TO DAYINTERVAL HOUR TO SECONDBINARY
    数データ真数INTEGER,SMALLINT,DECIMAL××××
    概数FLOAT,SMALLFLT××××××
    文字データCHAR,VARCHAR(DF)××
    CHAR,VARCHAR(EK)××
    CHAR,VARCHAR(U16)××
    各国文字データNCHAR,NVARCHAR××××××
    混在文字データMCHAR,MVARCHAR×××
    論理データBOOLEAN××××××
    日付データDATE××××
    時刻データTIME××××
    時刻印データTIMESTAMP×××
    日間隔データINTERVAL YEAR TO DAY××××
    時間隔データINTERVAL HOUR TO SECOND××××
    バイナリデータBINARY×××××
    (凡例)
    ○:データ変換ができます。
    ×:データ変換ができません。
    DF:既定文字集合
    EK:EBCDIK
    U16:UTF16
  9. ウィンドウ関数は指定できません。

(4) 結果のデータ型ごとの変換規則

(a) 数データ
(b) 文字データ,及び混在文字データ
注※
マルチバイト文字の途中で切り捨てが発生する場合,マルチバイト文字の一部分が結果の値として返されます。
(c) 各国文字データ
(d) 日付データ,時刻データ,及び時刻印データ
(e) 日間隔データ,及び時間隔データ
(f) バイナリデータ