C Interval 構造体

「C データ型」セクションに記載されている各 C 間隔データ型は、同じ構造を使用して間隔データを格納します。 SQLFetchSQLFetchScroll、または SQLGetData が呼び出されると、ドライバーはデータをSQL_INTERVAL_STRUCT構造体に返し、アプリケーションで C データ型 (SQLBindColSQLGetData、または SQLBindParameter の呼び出し) に指定された値を使用してSQL_INTERVAL_STRUCTの内容を解釈し、構造体のinterval_type フィールドに C 型に対応する列挙型の値を設定します。 ドライバーは、間隔の種類を決定するために interval_type フィールドを読み取らないことに注意してください。SQL_DESC_CONCISE_TYPE記述子フィールドの値を取得します。 パラメーター データに構造体を使用する場合、ドライバーは、アプリケーションがinterval_type フィールドの値を別の値に設定する場合でも、SQL_INTERVAL_STRUCTの内容を解釈する APD の SQL_DESC_CONCISE_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 フィールドは符号ビットとして機能します。