C-Intervallstruktur
Jeder der im Abschnitt C-Datentypen aufgeführten C-Intervalldatentypen verwendet dieselbe Struktur, um die Intervalldaten zu enthalten. Wenn SQLFetch, SQLFetchScroll oder SQLGetData aufgerufen wird, gibt der Treiber Daten in die SQL_INTERVAL_STRUCT-Struktur zurück, verwendet den Wert, der von der Anwendung für die C-Datentypen (im Aufruf von SQLBindCol, SQLGetData oder SQLBindParameter) angegeben wurde, um den Inhalt von SQL_INTERVAL_STRUCT zu interpretieren, und füllt das interval_type Feld der Struktur mit dem Enumerationswert auf, der dem C-Typ entspricht. Beachten Sie, dass Treiber das Feld interval_type nicht lesen, um den Typ des Intervalls zu bestimmen. sie rufen den Wert des SQL_DESC_CONCISE_TYPE Deskriptorfelds ab. Wenn die Struktur für Parameterdaten verwendet wird, verwendet der Treiber den von der Anwendung im feld SQL_DESC_CONCISE_TYPE der APD angegebenen Wert, um den Inhalt von SQL_INTERVAL_STRUCT zu interpretieren, auch wenn die Anwendung den Wert des felds interval_type auf einen anderen Wert festlegt.
Diese Struktur ist wie folgt definiert:
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;
Das interval_type Feld der SQL_INTERVAL_STRUCT gibt der Anwendung an, welche Struktur in der Union enthalten ist und welche Mitglieder der Struktur relevant sind. Das Feld interval_sign hat den Wert SQL_FALSE, wenn das Intervallleitfeld nicht signiert ist. wenn es SQL_TRUE ist, ist das führende Feld negativ. Der Wert im führenden Feld selbst ist immer ohne Vorzeichen, unabhängig vom Wert von interval_sign. Das feld interval_sign fungiert als Zeichenbit.