C 到 SQL:日時間間隔

日時間間隔 ODBC C 資料類型的識別碼如下:

SQL_C_INTERVAL_DAY

SQL_C_INTERVAL_HOUR

SQL_C_INTERVAL_MINUTE

SQL_C_INTERVAL_SECOND

SQL_C_INTERVAL_DAY_TO_HOUR

SQL_C_INTERVAL_DAY_TO_MINUTE

SQL_C_INTERVAL_DAY_TO_SECOND

SQL_C_INTERVAL_HOUR_TO_MINUTE

SQL_C_INTERVAL_HOUR_TO_SECOND

SQL_C_INTERVAL_MINUTE_TO_SECOND

下表顯示可轉換間隔 C 資料的 ODBC SQL 資料類型。 如需資料表中資料行和詞彙的說明,請參閱 將資料從 C 轉換成 SQL 資料類型

SQL 類型識別碼 測試 SQLSTATE
SQL_CHAR[a]

SQL_VARCHAR[a]

SQL_LONGVARCHAR[a]
資料行位元組長度 > = 字元位元組長度

資料行位元組長度 < 字元位元組長度[a]

資料值不是有效的間隔常值
n/a

22001

22015
SQL_WCHAR[a]

SQL_WVARCHAR[a]

SQL_WLONGVARCHAR[a]
資料行字元長度 > = 資料的字元長度

資料行字元長度 < 資料字元長度[a]

資料值不是有效的間隔常值
n/a

22001

22015
SQL_TINYINT[b]

SQL_SMALLINT[b] SQL_INTEGER[b]

SQL_BIGINT[b] SQL_NUMERIC[b]

SQL_DECIMAL[b]
單一欄位間隔的轉換不會導致截斷整個數位

轉換導致截斷整個數位
n/a

22003
SQL_INTERVAL_DAY

SQL_INTERVAL_HOUR

SQL_INTERVAL_MINUTE

SQL_INTERVAL_SECOND

SQL_INTERVAL_DAY_TO_HOUR

SQL_INTERVAL_DAY_TO_MINUTE

SQL_INTERVAL_DAY_TO_SECOND

SQL_INTERVAL_HOUR_TO_MINUTE

SQL_INTERVAL_HOUR_TO_SECOND

SQL_INTERVAL_MINUTE_TO_SECOND
資料值已轉換,而不會截斷任何欄位

轉換期間截斷了一或多個資料值欄位
n/a

22015

[a] 所有 C 間隔資料類型都可以轉換成字元資料類型。

[b] 如果間隔結構中的類型欄位是單一欄位(SQL_DAY、SQL_HOUR、SQL_MINUTE或SQL_SECOND),則間隔 C 類型可以轉換成任何確切的數位(SQL_TINYINT、SQL_SMALLINT、SQL_INTEGER、SQL_BIGINT、SQL_DECIMAL或SQL_NUMERIC)。

間隔 C 類型的預設轉換是對應日時間間隔 SQL 類型。

驅動程式會忽略從間隔 C 資料類型轉換資料時的長度/指標值,並假設資料緩衝區的大小是間隔 C 資料類型的大小。 長度/指標值會在 SQLPutData 中的 StrLen_or_Ind 引數和 SQLBindParameter 中以 StrLen_or_IndPtr 引數 指定的 緩衝區中傳遞 資料緩衝區是以 SQLPutData 中的 DataPtr 引數和 SQLBindParameter 中的 ParameterValuePtr 引數來指定

下列範例示範如何將儲存在 SQL_INTERVAL_STRUCT 結構中的間隔 C 資料傳送至資料庫資料行。 間隔結構包含DAY_TO_SECOND間隔;它會儲存在類型為 SQL_INTERVAL_DAY_TO_MINUTE 的資料庫資料行中。

SQL_INTERVAL_STRUCT is;  
SQLINTEGER cbValue;  
  
// Initialize the interval struct to contain the DAY_TO_SECOND  
// interval "154 days, 22 hours, 44 minutes, and 10 seconds"  
is.intval.day_second.day      = 154;  
is.intval.day_second.hour     = 22;  
is.intval.day_second.minute   = 44;  
is.intval.day_second.second   = 10;  
is.interval_sign              = SQL_FALSE;  
  
// Bind the dynamic parameter  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_INTERVAL_DAY_TO_SECOND,  
                  SQL_INTERVAL_DAY_TO_MINUTE, 0, 0, &is,  
                  sizeof(SQL_INTERVAL_STRUCT), &cbValue);  
  
// Execute an insert statement; "interval_column" is a column  
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.  
SQLExecDirect(hstmt,"INSERT INTO table(interval_column) VALUES (?)",SQL_NTS);