15.3.3 データ型変換時の注意事項
- 〈この項の構成〉
(1) BINARY型およびVARBINARY型に関する規則
■比較・格納代入時の規則
-
HADBのBINARY型またはVARBINARY型に対してデータ入力する際の規則を次に示します。
-
入力データがSQL_C_WCHARの場合,CHAR型への変換後に,SQL_C_CHARからバイナリ型への変換と同等の処理が行われます。
-
入力データが文字データ(SQL_C_WCHARの場合はSQL_C_CHARへの変換後のデータ)の場合,2バイトごとに1バイト(8ビット)のバイナリデータに変換されます。文字データは,2バイトで1つの16進数を表しています。例えば,01はバイナリの00000001に変換され,FFはバイナリの11111111に変換されます。したがって,「入力データのバイト長÷2」が「入力先のデータの定義長」を超える場合,エラーとなります。
-
-
SQL_C_BINARY型のデータを,HADBの各データ型に対してデータ入力する際の規則を次に示します。
-
入力先が文字列系データ(SQL_CHARなど)の場合,入力データの実長が入力先のデータの定義長を超えるとエラーになります。
-
■検索時の規則
-
HADBのBINARY型またはVARBINARY型から,データを出力する際の規則を次に示します。
-
文字列データで受け取る場合,変換元のデータの各バイト(8ビット)は,2文字のASCII文字として表示されます。この文字は,16進数をASCII表現したものです。例えば,バイナリの00000001は01に変換され,バイナリの11111111はFFに変換されます。BuffeLengthが,「変換元のデータのバイト長×2(SQL_C_WCHARの場合はさらに×2)」以下の場合,切り捨て(警告)が発生します。
-
(2) DATE型,TIME型,およびTIMESTAMP型に関する規則
-
DATE型の日付データまたはCHAR型の日付データをTIMESTAMP型の時刻印データに変換する場合,時刻印データの時刻部分には0が設定されます。
-
TIME型の時刻データまたはCHAR型の日付データをTIMESTAMP型の時刻印データに変換する場合,時刻印データの日付部分には現在の日付が設定されます。
-
TIME型の時刻データまたはCHAR型の時刻データを,TIME型の時刻データまたはTIMESTAMP型の時刻印データに変換する際,変換前データの小数秒の桁数が,変換後データの小数秒の桁数を超える場合は,超える部分については切り捨てられます。また,このときの戻り値はSQL_SUCCESSになります。
-
TIMESTAMP型の時刻印データまたはCHAR型の時刻印データをDATE型の日付データに変換する場合,変換前の時刻印データの日付部分だけが変換されます。また,このときの戻り値はSQL_SUCCESSになります。
-
TIMESTAMP型の時刻印データまたはCHAR型の時刻印データをTIME型の時刻データに変換する場合,変換前の時刻印データの時刻部分だけが変換されます。また,このときの戻り値はSQL_SUCCESSになります。
-
TIMESTAMP型の時刻印データまたはCHAR型の時刻印データを,TIME型の時刻データまたはTIMESTAMP型の時刻印データに変換する際,変換前データの小数秒の桁数が,変換後データの小数秒の桁数を超える場合は,超える部分については切り捨てられます。また,このときの戻り値はSQL_SUCCESSになります。
-
VARCHAR型についての扱いは,CHAR型と同じになります。
(3) SQL_DECIMAL型およびSQL_NUMERIC型に関する規則
HADBでは,SQL_DECIMAL型とSQL_NUMERIC型についての扱いは同じです。どちらでも使用できます。
「精度の値=スケールの値」となる桁数で,かつ1未満の小数点を持つ値をSQL_DECIMAL型またはSQL_NUMERIC型に対してデータ型を変換する場合,小数点の前に0を入力するとエラーになります。これは0も1桁としてカウントするためです。0を付けないで,小数点から記述を始めると正常に変換できます。
- (例)
-
テーブルに定義されたデータ型がDECIMAL(3,3)の値を検索,またはDECIMAL(3,3)の値に比較・代入する場合
-
0.123:エラーになります。
-
.123:正常に変換されます。
-
(4) SQL_DOUBLE型およびSQL_FLOAT型に関する規則
HADBでは,SQL_DOUBLE型とSQL_FLOAT型についての扱いは同じです。どちらでも使用できます。
(5) SQL_C_NUMERIC型に関する規則
-
HADBのSQL_C_NUMERIC型で使用できる最大精度は38になります。
-
SQL_DOUBLE型,SQL_FLOAT型からSQL_C_NUMERIC型にデータ型を変換する場合,またはSQL_CHAR型,SQL_VARCHAR型の数値文字列からSQL_C_NUMERIC型にデータ型を変換する場合,変換元のデータ形式が浮動小数点数の形式のときは,いったん固定小数点数の形式に変換し,そのあとにSQL_C_NUMERIC型に変換します。
-
浮動小数点数から固定小数点数への変換,または固定小数点数からSQL_C_NUMERIC型への変換規則を次に示します。
-
浮動小数点数の形式は,浮動小数点数定数の形式に準拠します。ただし,仮数部は38桁,指数部は3桁まで有効とします。浮動小数点数定数の形式については,マニュアルHADB SQLリファレンスの定数の記述形式を参照してください。
-
指数として指定できる最大値は38,最小値は-38になります。
-
指数が正の値の場合,仮数部の整数の桁数と,指数の値の合計が38を超えると,固定小数点数の形式に変換する際に,整数の切り捨てが発生するため,SQL_ERRORを返します。
-
指数が負の値の場合,仮数部の小数の桁数と,指数の絶対値の合計が38を超えると,固定小数点数の形式に変換する際に,小数の桁あふれが発生します。桁があふれた部分に0以外の数字がある場合は,SQL_SUCCESS_WITH_INFOを返します。そうでない場合は,SQL_SUCCESSを返します。
-