ページの先頭行へ戻る
Symfoware Server V11.0.x SQLリファレンス
Symfoware

2.7 CAST指定

機能

データ変換を指定します。

記述形式

一般規則

CASTオペランドのデータ型が真数の場合の変換規則
  • CAST相手のデータ型が真数または概数の場合、上位有効桁が失われた場合は、エラーになります。また、精度が失われた場合は、切捨てになります。

  • CAST相手のデータ型が固定長文字の場合、位取りは、CASTオペランドのデータ型と同じになります。また、CAST相手の文字列長が長い場合は、右側に空白を入れ、CAST相手の文字列長が短い場合は、エラーになります。また、CASTオペランドが負数の場合、先頭に''を付けます。

  • CAST相手のデータ型が可変長文字の場合、文字列長が合わせられること以外は固定長文字と同じになります。

  • CAST相手のデータ型が時間隔の場合、上位有効桁が失われた場合は、エラーになります。また、精度が失われた場合は、切捨てになります。

CASTオペランドのデータ型が概数の場合の変換規則
  • CAST相手のデータ型が真数または概数の場合、上位有効桁が失われた場合は、エラーになります。また、精度が失われた場合は、切捨てになります。

  • CAST相手のデータ型が固定長文字の場合、CAST相手の文字列長が長い場合は、右側に空白を入れ、CAST相手の文字列長が短い場合は、エラーになります。また、CASTオペランドが0の場合は、'0E0'になり、CASTオペランドが負数の場合は、先頭に''を付けます。また、CASTオペランドの絶対値が1未満の場合は、指数部に''を付けます。仮数部の先頭の正の符号'+'は省略します。

  • CAST相手のデータ型が可変長文字の場合、文字列長が合わせられること以外は固定長文字と同じになります。

CASTオペランドのデータ型が固定長文字または可変長文字の場合の変換規則
  • CAST相手のデータ型が真数または概数の場合、前後に空白がある場合は、空白は無視します。また、不当な文字がある場合は、エラーになります。ほかは文字を数値とみなした場合の変換規則と同じになります。

  • CAST相手のデータ型が固定長文字の場合、CAST相手の文字列長が長い場合は、右側に空白を入れ、CAST相手の文字列長が短い場合は、右側が切捨てになります。

  • CAST相手のデータ型が可変長文字の場合、文字列長が合わせられること以外は固定長文字と同じになります。

  • CAST相手のデータ型が日時の場合、前後に空白がある場合は、空白は無視します。また、各日時フィールドの先行する0は省略可能になります。また、文字列が日時値として不当な場合は、エラーになります。

  • CAST相手のデータ型が時間隔の場合、前後に空白がある場合は、空白は無視します。また、文字列がCAST相手の時間隔値として不当な場合は、エラーになります。また、上位有効桁が失われた場合は、エラーになります。

CASTオペランドのデータ型が各国語固定長文字または各国語可変長文字の場合の変換規則
  • CAST相手のデータ型が各国語固定長文字の場合、CAST相手の文字列長が長い場合は、右側に空白を入れ、CAST相手の文字列長が短い場合は、右側が切捨てになります。

  • CAST相手のデータ型が各国語可変長文字の場合、文字列長が合わせられること以外は各国語固定長文字と同じになります。

CASTオペランドのデータ型が日時の場合の変換規則
  • CAST相手のデータ型が固定長文字の場合、先行する0は省略しません。また、CAST相手の文字列長が長い場合は、右側に空白を入れ、CAST相手の文字列長が短い場合は、エラーになります。

  • CAST相手のデータ型が可変長文字の場合、文字列長が合わせられること以外は固定長文字と同じになります。

  • CAST相手のデータ型が日時の場合、同じデータ型間では変換可能です。時刻印から日付の場合は、時刻印の日付部分になり、時刻印から時刻の場合は、時刻印の時刻部分になり、日付から時刻印の場合は、時刻部分は'00:00:00'になり、時刻から時刻印の場合は、日付部分は現在の日付になります。

CASTオペランドのデータ型が時間隔の場合の変換規則
  • CAST相手のデータ型が真数の場合、上位有効桁が失われた場合は、エラーになります。

  • CAST相手のデータ型が固定長文字の場合、CAST相手の文字列長が長い場合は、右側に空白を入れ、CAST相手の文字列長が短い場合は、エラーになります。また、CASTオペランドが負数の場合、先頭に''を付けます。

  • CAST相手のデータ型が可変長文字の場合、文字列長が合わせられること以外は固定長文字と同じになります。

  • CAST相手のデータ型が時間隔の場合、上位有効桁が溢れた場合は、エラーになります。また、精度が失われた場合は、切捨てになります。

CAST指定により変換可能なデータ型の組み合わせ
  • CAST指定により変換可能なデータ型の組合せを以下に示します。なお、BLOB型は指定できません。

    表2.41 CAST指定により変換可能なデータ型の組合せ

      

    CAST相手データ型

    真数

    概数

    文字型

    各国語

    日時

    時間隔

    固定長

    可変長

    固定長

    可変長

    日付

    時刻

    時刻印

    年月

    日時

    CASTオペランドデータ型

    真数

    ×

    ×

    ×

    ×

    ×

    概数

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    文字型

    固定長

    ×

    ×

    可変長

    ×

    ×

    各国語

    固定長

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    可変長

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    日時

    日付

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    時刻

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    時刻印

    ×

    ×

    ×

    ×

    ×

    ×

    時間隔

    年月

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    日時

    ×

    ×

    ×

    ×

    ×

    ×

    ×

    ○: 変換可能な組合せ

    △: 時間隔が単一日時フィールドだけを含む場合に可能な組合せ

    ×: 変換不可能な組合せ

DESCRIBE情報について
  • CAST指定の各オペランドに動的パラメタ指定が指定された場合のDESCRIBE情報を以下に示します。

    表2.42 動的パラメタ指定が指定された場合のDESCRIBE情報

    オペランド

    DESCRIBE情報

    CASTオペランド

    CAST相手のデータ型

導出表にCAST指定を指定した場合の注意事項

導出表を記述したSQL文を実行した場合、Symfoware/RDBの最適化処理で入れ子をなくし平坦な形式のSQL文に変換する場合があります。このSQL文の変換では、変換前のSQL文の導出表の選択リストにCAST指定が指定されていると、CAST指定を条件式に移動することがあります。

このとき、データベースにCAST指定で変換できないデータが含まれると、導出表の条件式において変換できないデータを除外していたとしても、条件式に移動したCAST指定において、CAST指定の変換エラーが発生する場合があります。そのため、データベースにCAST指定で変換できないデータが含まれる場合は、CASE式を用いて、変換できないデータを除外することにより、CAST指定で変換エラーが発生しないように対処してください。
以下に例を示します。

実行するSQL文

注1) 選択リストにCAST指定を記述。

注2) 最も内側の導出表にて文字列の空白以外を取り出す判定。

最適化処理が変換したSQL文

Symfoware/RDBの最適化処理が変換したSQL文は、以下のようになります。

注1) 文字列の空白以外を取り出す判定。

注2) 文字列をCASTし、変換結果を判定。

その結果、注2のCAST指定に指定された列の値が空白の場合、TIMESTAMP型にデータ型変換することができず、変換エラーになります。

対処例

CASE式を用いて、空白のデータを除外することにより、CASTで変換エラーが発生しないように対処してください。

使用例

1

SMALLINT型に変換します。

CAST(10.13 AS SMALLINT)
→結果は10になります。

2

CHAR型に変換します。

CAST(-99.99 AS CHAR(6))
→結果は-99.99になります。

3

CHAR型に変換します。

CAST(INTERVAL '20:30' MINUTE TO SECOND AS CHAR(5))
→結果は20:30になります。

4

営業所一覧表から、処理日に6ヶ月加算した日付を取り出します。文字列型のホスト変数“CDATA”には“6”が設定されているとします。

SELECT コード,処理日 + CAST(:CDATA AS INTERVAL MONTH)
    FROM 在庫管理.営業所一覧表