SQL から C へ: 日付と時刻の間隔
曜日間隔 ODBC SQL データ型の識別子は次のとおりです。
- SQL_INTERVAL_DAY
- SQL_INTERVAL_DAY_TO_MINUTE
- SQL_INTERVAL_HOUR
- SQL_INTERVAL_DAY_TO_SECOND
- SQL_INTERVAL_MINUTE
- SQL_INTERVAL_HOUR_TO_MINUTE
- SQL_INTERVAL_SECOND
- SQL_INTERVAL_HOUR_TO_SECOND
- SQL_INTERVAL_DAY_TO_HOUR
- SQL_INTERVAL_MINUTE_TO_SECOND
次の表は、日付と時刻の間隔の SQL データを変換できる ODBC C データ型を示しています。 テーブル内の列と用語の詳細については、「 SQL から C データ型へのデータの変換」を参照してください。
C 型識別子 | テスト | * TargetValuePtr | * StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
すべての日単位の C 間隔の種類 | 末尾のフィールド部分が切り捨てられない 末尾のフィールド部分の切り捨て ターゲットの先行精度は、ソースからのデータを保持するのに十分な大きさではありません |
Data 切り捨てられたデータ 未定義。 |
データの長さ データの長さ 未定義。 |
該当なし 01S07 22015 |
SQL_C_STINYINT[b] SQL_C_UTINYINT[b] SQL_C_USHORT[b] SQL_C_SHORT[b] SQL_C_SLONG[b] SQL_C_ULONG[b] SQL_C_NUMERIC[b] SQL_C_BIGINT[b] | 間隔の有効桁数は 1 つのフィールドで、データは切り捨てなしで変換されました 間隔の有効桁数が 1 つのフィールドであり、小数部が切り捨てられました 間隔の有効桁数は 1 つのフィールドで、全体が切り捨てられました 間隔の有効桁数が 1 つのフィールドではなかった |
Data 切り捨てられたデータ 切り捨てられたデータ 未定義。 |
C データ型のサイズ データの長さ データの長さ C データ型のサイズ |
該当なし 01S07 22003 07006 |
SQL_C_BINARY | データ <のバイト長 = BufferLength データ >BufferLength のバイト長 |
Data 未定義。 |
データの長さ 未定義。 |
該当なし 22003 |
SQL_C_CHAR | 文字バイト長 <BufferLength 整数 (小数部ではなく) 桁数 <BufferLength 整数 (小数部ではなく) の桁数 >= BufferLength |
Data 切り捨てられたデータ 未定義。 |
C データ型のサイズ C データ型のサイズ 未定義。 |
該当なし 01004 22003 |
SQL_C_WCHAR | 文字の長さ <BufferLength 整数 (小数部ではなく) 桁数 <BufferLength 整数 (小数部ではなく) の桁数 >= BufferLength |
Data 切り捨てられたデータ 未定義。 |
C データ型のサイズ C データ型のサイズ 未定義。 |
該当なし 01004 22003 |
[a] 日間隔 SQL 型は、任意の日時間間隔 C 型に変換できます。
[b] 間隔の有効桁数が 1 つのフィールド (DAY、HOUR、MINUTE、または SECOND のいずれか) の場合、間隔 SQL 型は任意の正確な数値 (SQL_C_STINYINT、SQL_C_UTINYINT、SQL_C_USHORT、SQL_C_SHORT、SQL_C_SLONG、SQL_C_ULONG、またはSQL_C_NUMERIC) に変換できます。
間隔 SQL 型の既定の変換は、対応する C 間隔データ型に変換されます。 その後、アプリケーションは列またはパラメーターをバインドし (または、ARD の適切なレコードのSQL_DESC_DATA_PTR フィールドを設定します)、初期化されたSQL_INTERVAL_STRUCT構造体を指すようにします (または、SQLGetData の呼び出しで TargetValuePtr 引数としてSQL_ INTERVAL_STRUCT構造体へのポインターを渡します)。
次の例では、SQL_INTERVAL_DAY_TO_MINUTE型の列からSQL_INTERVAL_STRUCT構造にデータを転送して、DAY_TO_HOUR間隔として返す方法を示します。
SQL_INTERVAL_STRUCT is;
SQLINTEGER cbValue;
SQLUINTEGER days, hours;
// Execute a select statement; "interval_column" is a column
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.
SQLExecDirect(hstmt, "SELECT interval_column FROM table", SQL_NTS);
// Bind
SQLBindCol(hstmt, 1, SQL_C_INTERVAL_DAY_TO_MINUTE, &is, sizeof(SQL_INTERVAL_STRUCT), &cbValue);
// Fetch
SQLFetch(hstmt);
// Process data
days = is.intval.day_second.day;
hours = is.intval.day_second.hour;