Share via


Datums-, Zeit- und Zeitstempelliterale

Die Escapesequenz für Datums-, Uhrzeit- und Zeitstempelliterale ist

{-type'value'}

wobei literaltyp einer der werte ist, die in der folgenden Tabelle aufgeführt sind.

Literaltyp Bedeutung Format des Werts
d Datum yyyy-mm-dd
t Uhrzeit* hh:mm:ss[1]
ts Timestamp jjjj-mm-tthh:mm:ss[.f...] [1]

[1] Die Anzahl der Ziffern rechts neben dem Dezimalkomma in einem Zeit- oder Zeitstempelintervallliteral, das eine Sekundenkomponente enthält, hängt von der Sekundengenauigkeit ab, wie im Feld SQL_DESC_PRECISION Deskriptor enthalten. (Weitere Informationen finden Sie unter SQLSetDescField.)

Weitere Informationen zu den Escapesequenzen für Datum, Uhrzeit und Zeitstempel finden Sie in Anhang C: SQL Grammar.

Beispielsweise aktualisieren beide der folgenden SQL-Anweisungen das Öffnungsdatum des Verkaufsauftrags 1023 in der Tabelle "Bestellungen". Die erste Anweisung verwendet die Escapesequenzsyntax. Die zweite Anweisung verwendet die native Oracle Rdb-Syntax für die DATE-Spalte und ist nicht interoperabel.

UPDATE Orders SET OpenDate={d '1995-01-15'} WHERE OrderID=1023  
UPDATE Orders SET OpenDate='15-Jan-1995' WHERE OrderID=1023  

Die Escapesequenz für ein Datums-, Uhrzeit- oder Zeitstempelliteral kann auch in einer Zeichenvariable platziert werden, die an einen Datums-, Uhrzeit- oder Zeitstempelparameter gebunden ist. Der folgende Code verwendet beispielsweise einen Datumsparameter, der an eine Zeichenvariable gebunden ist, um das Öffnungsdatum der Bestellung 1023 in der Tabelle "Bestellungen" zu aktualisieren:

SQLCHAR      OpenDate[56]; // The size of a date literal is 55.  
SQLINTEGER   OpenDateLenOrInd = SQL_NTS;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_TYPE_DATE, 0, 0,  
                  OpenDate, sizeof(OpenDate), &OpenDateLenOrInd);  
  
// Place the date in the OpenDate variable. In addition to the escape  
// sequence shown, it would also be possible to use either of the  
// strings "{d '1995-01-15'}" and "15-Jan-1995", although the latter  
// is data source-specific.  
strcpy_s( (char*) OpenDate, _countof(OpenDate), "{d '1995-01-15'}");  
  
// Execute the statement.  
SQLExecDirect(hstmt, "UPDATE Orders SET OpenDate=? WHERE OrderID = 1023", SQL_NTS);  

In der Regel ist es jedoch effizienter, den Parameter direkt an eine Datumsstruktur zu binden:

SQL_DATE_STRUCT   OpenDate;  
SQLINTEGER        OpenDateInd = 0;  
  
// Bind the parameter.  
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_TYPE_DATE, SQL_TYPE_DATE, 0, 0,  
                  &OpenDate, 0, &OpenDateLen);  
  
// Place the date in the dsOpenDate structure.  
OpenDate.year = 1995;  
OpenDate.month = 1;  
OpenDate.day = 15;  
  
// Execute the statement.  
SQLExecDirect(hstmt, "UPDATE Employee SET OpenDate=? WHERE OrderID = 1023", SQL_NTS);  

Um festzustellen, ob ein Treiber die ODBC-Escapesequenzen für Datums-, Uhrzeit- oder Zeitstempelliterale unterstützt, ruft eine Anwendung SQLGetTypeInfo auf. Wenn die Datenquelle einen Datentyp für Datum, Uhrzeit oder Zeitstempel unterstützt, muss sie auch die entsprechende Escapesequenz unterstützen.

Datenquellen können auch die in der ANSI SQL-92-Spezifikation definierten Datetime-Literale unterstützen, die sich von den ODBC-Escapesequenzen für Datums-, Uhrzeit- oder Zeitstempelliterale unterscheiden. Um festzustellen, ob eine Datenquelle die ANSI-Literale unterstützt, ruft eine Anwendung SQLGetInfo mit der option SQL_ANSI_SQL_DATETIME_LITERALS auf.

Um festzustellen, ob ein Treiber die ODBC-Escapesequenzen für Intervallliterale unterstützt, ruft eine Anwendung SQLGetTypeInfo auf. Wenn die Datenquelle einen Datentyp für datumstime-Intervalle unterstützt, muss sie auch die entsprechende Escapesequenz unterstützen.

Datenquellen können auch die in der ANSI SQL-92-Spezifikation definierten Datetime-Literale unterstützen, die sich von den ODBC-Escapesequenzen für Datumsintervallliterale unterscheiden. Um festzustellen, ob eine Datenquelle die ANSI-Literale unterstützt, ruft eine Anwendung SQLGetInfo mit der option SQL_ANSI_SQL_DATETIME_LITERALS auf.