Literály data, času a časového razítka

Úniková sekvence pro literály data, času a časového razítka je

{-'typevalue'}

where literal-type je jedna z hodnot uvedených v následující tabulce.

typ literálu Meaning Formát hodnoty
d Date yyyy-milimetr-Dd
T Čas* hh:mm:ss[1]
Ts Časová značka Rrrr-Mm-ddhh:mm:ss[.f...][1]

[1] Počet číslic napravo od desetinné čárky v literálu intervalu času nebo časového razítka obsahujícího součást sekund závisí na přesnosti sekund, která je obsažena v poli popisovače SQL_DESC_PRECISION. (Další informace naleznete v tématu SQLSetDescField.)

Další informace o únikových sekvencích data, času a časového razítka viz Řídicí sekvence pro datum, čas a časové razítko v dodatku C: Gramatika SQL.

Například oba následující příkazy SQL aktualizují otevřené datum prodejní objednávky 1023 v tabulce Orders. První příkaz používá syntaxi escape sekvence. Druhý příkaz používá nativní syntaxi Oracle Rdb pro sloupec DATE a není interoperabilní.

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

Únikovou sekvenci pro literál data, času nebo časového razítka lze také umístit do řetězcové proměnné přiřazené parametru data, času nebo časového razítka. Následující kód například používá parametr data vázaného na proměnnou znaku k aktualizaci otevřeného data prodejní objednávky 1023 v tabulce Orders:

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);  

Obvykle je ale efektivnější svázat parametr přímo se strukturou kalendářních dat:

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);  

Chcete-li zjistit, zda ovladač podporuje řídicí sekvence ODBC pro datum, čas nebo literály časového razítka, aplikace volá SQLGetTypeInfo. Pokud zdroj dat podporuje datový typ data, času nebo časového razítka, musí také podporovat odpovídající escape sekvenci.

Zdroje dat mohou také podporovat literály data a času definované ve specifikaci ANSI SQL-92, které se liší od řídicích sekvencí ODBC pro literály data, času nebo časového razítka. Chcete-li zjistit, zda zdroj dat podporuje literály ANSI, aplikace volá SQLGetInfo s možností SQL_ANSI_SQL_DATETIME_LITERALS.

Aby aplikace zjistila, zda ovladač podporuje únikové sekvence ODBC pro intervalové literály, volá SQLGetTypeInfo. Pokud zdroj dat podporuje datový typ intervalu datum a čas, musí také podporovat odpovídající escape sekvenci.

Zdroje dat mohou také podporovat literály datetime definované ve specifikaci ANSI SQL-92, které se liší od escape sekvencí ODBC pro literály časových intervalů. Chcete-li zjistit, zda zdroj dat podporuje literály ANSI, aplikace volá SQLGetInfo s možností SQL_ANSI_SQL_DATETIME_LITERALS.