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 間隔類型 | 結尾欄位部分未截斷 結尾欄位部分截斷 目標的主要精確度不夠大,無法保存來源的資料 |
資料 截斷的資料 未定義 |
資料長度 資料長度 未定義 |
n/a 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] | 間隔有效位數是單一欄位,且資料未經截斷即可轉換 間隔有效位數是單一欄位和截斷的小數點數 間隔有效位數是單一欄位並截斷整個 間隔有效位數不是單一欄位 |
資料 截斷的資料 截斷的資料 未定義 |
C 資料類型的大小 資料長度 資料長度 C 資料類型的大小 |
n/a 01S07 22003 07006 |
SQL_C_BINARY | 位元組長度的資料 < = BufferLength 資料 > BufferLength 的位元組長度 |
資料 未定義 |
資料長度 未定義 |
n/a 22003 |
SQL_C_CHAR | 字元位元組長度 < BufferLength 整數數(而不是小數)位數 < BufferLength 整數數 (而不是小數) 位數 > = BufferLength |
資料 截斷的資料 未定義 |
C 資料類型的大小 C 資料類型的大小 未定義 |
n/a 01004 22003 |
SQL_C_WCHAR | 字元長度 < BufferLength 整數數(而不是小數)位數 < BufferLength 整數數 (而不是小數) 位數 > = BufferLength |
資料 截斷的資料 未定義 |
C 資料類型的大小 C 資料類型的大小 未定義 |
n/a 01004 22003 |
[a] 日時間間隔 SQL 類型可以轉換成任何日時間間隔 C 類型。
[b] 如果間隔有效位數是單一欄位(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 interval 資料類型。 然後,應用程式會系結資料行或參數(或設定 ARD 適當記錄中的SQL_DESC_DATA_PTR欄位),以指向初始化的SQL_INTERVAL_STRUCT結構(或將指標傳遞至SQL_ INTERVAL_STRUCT結構的指標,做為 對 SQLGetData 的呼叫 中的 TargetValuePtr 引數)。
下列範例示範如何將資料從類型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;