Teilen über


SQL zu C: Tag-Uhrzeit-Intervalle

Die Bezeichner für die ODBC SQL-Datentypen für das Tag-Zeit-Intervall sind die folgenden:

  • SQL_INTERVAL_DAY
  • SQL_INTERVAL_DAY_TO_MINUTE
  • SQL_INTERVAL_HOUR
  • SQL_INTERVAL_DAY_TO_SECOND
  • SQL_INTERVAL_MINUTE
  • SQL_INTERVAL_HOUR_TO_MINUTE
  • SQL_INTERVAL_SECOND
  • SQL_INTERVAL_HOUR_TO_SECOND
  • SQL_INTERVAL_DAY_TO_HOUR
  • SQL_INTERVAL_MINUTE_TO_SECOND

In der folgenden Tabelle sind die ODBC C-Datentypen aufgeführt, in die SQL-Daten im Tages- und Uhrzeitintervall konvertiert werden können. Eine Erläuterung der Spalten und Begriffe in der Tabelle finden Sie unter Konvertieren von Daten aus SQL in C-Datentypen.

C-Typbezeichner Test *TargetValuePtr *StrLen_or_IndPtr SQLSTATE
Ganztägige C-Intervalltypen Nachgestellter Feldteil nicht abgeschnitten

Nachgestellter Feldteil abgeschnitten

Führende Genauigkeit des Ziels ist nicht groß genug, um Daten aus der Quelle zu halten
Daten

Abgeschnittene Daten

Nicht definiert
Länge der Daten

Länge der Daten

Nicht definiert


01S07

22015
SQL_C_STINYINT[b] SQL_C_UTINYINT[b] SQL_C_USHORT[b] SQL_C_SHORT[b] SQL_C_SLONG[b] SQL_C_ULONG[b] SQL_C_NUMERIC[b] SQL_C_BIGINT[b] Die Intervallgenauigkeit war ein einzelnes Feld, und die Daten wurden ohne Abschneiden konvertiert.

Die Intervallgenauigkeit war ein einzelnes Feld und ein abgeschnittener Bruchteil.

Intervallgenauigkeit war ein einzelnes Feld und abgeschnittenes Ganzes

Intervallgenauigkeit war kein einzelnes Feld
Daten

Abgeschnittene Daten

Abgeschnittene Daten

Nicht definiert
Größe des C-Datentyps

Länge der Daten

Länge der Daten

Größe des C-Datentyps


01S07

22003

07006
SQL_C_BINARY Bytelänge der Daten <= BufferLength

Bytelänge der Daten >BufferLength
Daten

Nicht definiert
Länge der Daten

Nicht definiert


22003
SQL_C_CHAR Zeichenbytelänge <BufferLength

Anzahl der ganzen Ziffern (im Gegensatz zu Bruchstellen<) BufferLength

Anzahl ganzer Ziffern (im Gegensatz zu Bruchstellen >) = BufferLength
Daten

Abgeschnittene Daten

Nicht definiert
Größe des C-Datentyps

Größe des C-Datentyps

Nicht definiert


01004

22003
SQL_C_WCHAR Zeichenlänge <BufferLength

Anzahl der ganzen Ziffern (im Gegensatz zu Bruchstellen<) BufferLength

Anzahl ganzer Ziffern (im Gegensatz zu Bruchstellen >) = BufferLength
Daten

Abgeschnittene Daten

Nicht definiert
Größe des C-Datentyps

Größe des C-Datentyps

Nicht definiert


01004

22003

[a] Ein SQL-Typ für ein Tag-Zeit-Intervall kann in einen beliebigen Tag-Zeit-Intervall-C-Typ konvertiert werden.

[b] Wenn die Intervallgenauigkeit ein einzelnes Feld (TAG, STUNDE, MINUTE oder SEKUNDE) ist, kann der SQL-Intervalltyp in einen beliebigen genauen numerischen Typ (SQL_C_STINYINT, SQL_C_UTINYINT, SQL_C_USHORT, SQL_C_SHORT, SQL_C_SLONG, SQL_C_ULONG oder SQL_C_NUMERIC) konvertiert werden.

Die Standardkonvertierung eines SQL-Intervalltyps ist in den entsprechenden C-Intervalldatentyp. Die Anwendung bindet dann die Spalte oder den Parameter (oder legt das SQL_DESC_DATA_PTR Feld im entsprechenden Datensatz der ARD fest), um auf die initialisierte SQL_INTERVAL_STRUCT -Struktur zu verweisen (oder übergibt einen Zeiger auf die SQL_ INTERVAL_STRUCT-Struktur als TargetValuePtr-Argument in einem Aufruf von SQLGetData).

Im folgenden Beispiel wird veranschaulicht, wie Daten aus einer Spalte vom Typ SQL_INTERVAL_DAY_TO_MINUTE in die SQL_INTERVAL_STRUCT-Struktur übertragen werden, sodass sie als DAY_TO_HOUR Intervall zurückkommen.

SQL_INTERVAL_STRUCT is;  
SQLINTEGER    cbValue;  
SQLUINTEGER   days, hours;  
  
// Execute a select statement; "interval_column" is a column  
// whose data type is SQL_INTERVAL_DAY_TO_MINUTE.  
SQLExecDirect(hstmt, "SELECT interval_column FROM table", SQL_NTS);  
  
// Bind  
SQLBindCol(hstmt, 1, SQL_C_INTERVAL_DAY_TO_MINUTE, &is, sizeof(SQL_INTERVAL_STRUCT), &cbValue);  
  
// Fetch  
SQLFetch(hstmt);  
  
// Process data  
days = is.intval.day_second.day;  
hours = is.intval.day_second.hour;