Поделиться через


Структура Interval (C)

Каждый из типов данных интервала C, перечисленных в разделе типов данных C, использует ту же структуру для хранения данных интервала. При вызове SQLFetch, SQLFetchScroll или SQLGetData драйвер возвращает данные в структуру SQL_INTERVAL_STRUCT, использует значение, указанное приложением для типов данных C (в вызове SQLBindCol, SQLGetData или SQLBindParameter), чтобы интерпретировать содержимое SQL_INTERVAL_STRUCT, и заполняет поле interval_type структуры значением перечисления, соответствующим типу C. Обратите внимание, что драйверы не считывают поле interval_type для определения типа интервала; они извлекают значение поля дескриптора SQL_DESC_CONCISE_TYPE. Если структура используется для данных параметров, драйвер использует значение, указанное приложением в поле SQL_DESC_CONCISE_TYPE APD, чтобы интерпретировать содержимое 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;  

Поле interval_type SQL_INTERVAL_STRUCT указывает приложению, какая структура хранится в союзе, а также какие члены структуры имеют отношение. Поле interval_sign имеет значение SQL_FALSE, если начальное поле интервала не назначено; если оно SQL_TRUE, то в начале поле отрицательное значение. Значение в самом начале поля всегда без знака независимо от значения interval_sign. Поле interval_sign выступает в качестве бита знака.