C 間隔結構

C 資料類型區段中所列 的每個 C 間隔資料類型 都會使用相同的結構來包含間隔資料。 呼叫 SQLFetch、 SQLFetchScroll SQLGetData 時 ,驅動程式會將資料傳回至 SQL_INTERVAL_STRUCT 結構,使用應用程式針對 C 資料類型所指定的值(在呼叫 SQLBindCol SQLGetData SQLBindParameter 時)解譯SQL_INTERVAL_STRUCT的內容,並以對應至 C 類型的列舉 值填 入結構的 interval_type 欄位。 請注意,驅動程式不會讀取 interval_type 欄位來判斷間隔的類型;它們會擷取SQL_DESC_CONCISE_TYPE描述元欄位的值。 當 結構用於參數資料時,驅動程式會使用應用程式在 APD 的 SQL_DESC_CONCISE_TYPE 欄位中指定的值來解譯SQL_INTERVAL_STRUCT的內容,即使應用程式將interval_type 欄位的值 設定為不同的值也一樣。

此結構的定義如下:

typedef struct tagSQL_INTERVAL_STRUCT  
{  
   SQLINTERVAL interval_type;   
   SQLSMALLINT interval_sign;  
   union {  
         SQL_YEAR_MONTH_STRUCT   year_month;  
         SQL_DAY_SECOND_STRUCT   day_second;  
         } intval;  
} SQL_INTERVAL_STRUCT;  
typedef enum   
{  
   SQL_IS_YEAR = 1,  
   SQL_IS_MONTH = 2,  
   SQL_IS_DAY = 3,  
   SQL_IS_HOUR = 4,  
   SQL_IS_MINUTE = 5,  
   SQL_IS_SECOND = 6,  
   SQL_IS_YEAR_TO_MONTH = 7,  
   SQL_IS_DAY_TO_HOUR = 8,  
   SQL_IS_DAY_TO_MINUTE = 9,  
   SQL_IS_DAY_TO_SECOND = 10,  
   SQL_IS_HOUR_TO_MINUTE = 11,  
   SQL_IS_HOUR_TO_SECOND = 12,  
   SQL_IS_MINUTE_TO_SECOND = 13  
} SQLINTERVAL;  
  
typedef struct tagSQL_YEAR_MONTH  
{  
   SQLUINTEGER year;  
   SQLUINTEGER month;   
} SQL_YEAR_MONTH_STRUCT;  
  
typedef struct tagSQL_DAY_SECOND  
{  
   SQLUINTEGER day;  
   SQLUINTEGER hour;  
   SQLUINTEGER minute;  
   SQLUINTEGER second;  
   SQLUINTEGER fraction;  
} SQL_DAY_SECOND_STRUCT;  

SQL_INTERVAL_STRUCT的 [interval_type ] 欄位會向應用程式指出在等位中保留哪些結構,以及結構的成員是相關的。 如果 間隔前置欄位未帶正負號,則interval_sign 欄位具有值SQL_FALSE;如果SQL_TRUE,則前置欄位為負數。 不論interval_sign 的值 為何,前置欄位本身的值一律為不帶正負號。 [interval_sign ] 欄位可作為符號位。