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 설명자 필드의 값을 검색합니다. 매개 변수 데이터에 구조가 사용되는 경우 애플리케이션이 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 필드는 부호 비트로 작동합니다.