変換規則

このセクションの規則は、数値リテラルを含む変換に適用されます。 これらの規則の目的のために、次の用語が定義されています。

  • ストアの割り当て: データベース内のテーブル列にデータを送信する場合。 これは、SQLExecute、SQLExecDirect、および SQLSetPos の呼び出し中に発生します。 ストアの割り当て中に、"target" はデータベース列を参照し、"source" はアプリケーション バッファー内のデータを参照します。

  • 取得の割り当て: データベースからアプリケーション バッファーにデータを取得する場合。 これは、 SQLFetchSQLGetDataSQLFetchScroll、および SQLSetPos の呼び出し中に発生します。 取得の割り当て中に、"target" はアプリケーション バッファーを参照し、"source" はデータベース列を参照します。

  • Cs: 文字ソースの値。

  • Nt: 数値ターゲットの値。

  • Ns: 数値ソースの値。

  • Ct: 文字ターゲットの値。

  • 正確な数値リテラルの有効桁数: それに含まれる桁数。

  • 正確な数値リテラルの小数点以下桁数: 表現または暗黙的な期間の右側の桁数。

  • 近似数値リテラルの有効桁数: 仮数の有効桁数。

文字ソースから数値ターゲットへ

文字ソース (CS) から数値ターゲット (NT) に変換する規則を次に示します。

  1. CS を、CS 内の先頭または末尾のスペースを削除して取得した値に置き換えます。 CS が有効な 数値リテラルでない場合は、SQLSTATE 22018 (キャスト指定に無効な文字値) が返されます。

  2. CS を、小数点の前の先頭のゼロ、小数点の後の末尾のゼロ、またはその両方を削除して取得した値に置き換えます。

  3. CS を NT に変換します。 変換の結果有効桁数が失われる場合は、SQLSTATE 22003 (範囲外の数値) が返されます。 変換の結果、小数でない数字が失われる場合は、SQLSTATE 01S07 (小数部の切り捨て) が返されます。

数値ソースから文字ターゲットへ

数値ソース (NS) から文字ターゲット (CT) に変換する規則を次に示します。

  1. LT を CT の文字数で指定します。 取得割り当ての場合、LT はバッファーの長さ (文字数) から、この文字セットの null 終端文字のバイト数を引いた値に等しくなります。

  2. 場合:

    • NS が正確な数値型の場合は、正確 な数値リテラル の定義に準拠する最短の文字列を、YP のスケールが NS のスケールと同じで、解釈される値が NS の絶対値になるように、YP に等しくします。

    • NS がおおよその数値型の場合は、次のように文字文字列を使用します。

      大文字と小文字の区別:

      NS が 0 の場合、0 になります。

      YSN を、正確な数値リテラル の定義に準拠し、解釈される値が NS の絶対値である最短の文字列にします。 YSN の長さが NS のデータ型の (有効桁数 + 1) より小さい場合は、YSN と等しくします。

      それ以外の場合、解釈される値が NS の絶対値であり、仮が '0' ではない 1 桁の数字で構成され、その後にピリオド符号なし整数が続く、近似数値リテラルの定義に準拠する最短の文字列が、その文字ストリングです。

  3. 大文字と小文字の区別:

    • NS が 0 未満の場合は、Y を次の結果にします。

      '-' ||Yp

      ここで、'||' は文字列連結演算子です。

      それ以外の場合は、Y を同じYPに設定します。

  4. LY を Y の文字数で指定します。

  5. 大文字と小文字の区別:

    • LY が LT と等しい場合、CT は Y に設定されます。

    • LY が LT より小さい場合、CT は適切な数のスペースによって右側に拡張された Y に設定されます。

      それ以外の場合 (LY > LT)、Y の最初の LT 文字を CT にコピーします。

      大文字と小文字の区別:

      これがストアの割り当てである場合は、エラー SQLSTATE 22001 (文字列データ、右切り捨て) を返します。

      これが取得割り当ての場合は、警告 SQLSTATE 01004 (文字列データ、右切り捨て) を返します。 コピーの結果、小数部の数字 (末尾のゼロ以外) が失われる場合、次のいずれかが発生するかどうかはドライバーによって定義されます。

      (1) ドライバーは、Y の文字列を適切なスケールに切り捨てて (ゼロにすることもできます)、結果を CT に書き込みます。

      (2) ドライバーは、Y の文字列を適切なスケールに丸め (ゼロにすることもできます)、結果を CT に書き込みます。

      (3) ドライバーは切り捨ても丸めもしませんが、Y の最初の LT 文字を CT にコピーするだけです。