C 间隔结构

C 数据类型部分中列出的每个 C 间隔数据类型都使用相同的结构来包含间隔数据。 调用 SQLFetchSQLFetchScrollSQLGetData 时,驱动程序会将数据返回到 SQL_INTERVAL_STRUCT 结构中,使用应用程序在调用 SQLBindColSQLGetDataSQLBindParameter (时为 C 数据类型指定的值) 来解释SQL_INTERVAL_STRUCT的内容,并使用与 C 类型对应的枚举值填充结构的 interval_type 字段。 请注意,驱动程序不会读取 interval_type 字段来确定间隔的类型;它们检索SQL_DESC_CONCISE_TYPE描述符字段的值。 当结构用于参数数据时,即使应用程序将 interval_type字段的值 设置为不同的值,驱动程序也会使用应用程序在 APD 的SQL_DESC_CONCISE_TYPE字段中指定的值来解释SQL_INTERVAL_STRUCT的内容。

此结构定义如下:

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字段充当符号位。