Megosztás:


Dátum, idő és időbélyeg literálok

A dátum-, idő- és időbélyeg-konstansok feloldósorozata a következő:

{-type'value'}

ahol a literális típus az alábbi táblázatban felsorolt értékek egyike.

literáltípus Meaning Az érték formátuma
d Date yyyy-Mm-Dd
T Idő* hh:mm:ss[1]
Ts Időbélyeg yyyy-mm-ddhh:mm:ss[.f...][1]

[1] A másodperc összetevőt tartalmazó idő- vagy időbélyeg-intervallumban a tizedesvesszőtől jobbra lévő számjegyek száma a másodperc pontosságától függ, ahogyan az SQL_DESC_PRECISION leíró mezőben található. (További információ: SQLSetDescField.)

A dátum-, idő- és időbélyeg-menekülési sorozatokról további információt a C. függelékben, az SQL Grammar résznél található Dátum, Idő és Időbélyeg menekülési sorozatok című szakaszban talál.

Például az alábbi SQL-utasítások mindegyike frissíti az 1023-ás értékesítési rendelés nyitott dátumát a Rendelések táblában. Az első utasítás a feloldósorozat szintaxisát használja. A második utasítás az Oracle Rdb natív szintaxisát használja a DATE oszlophoz, és nem működik együtt.

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

A dátum-, idő- vagy időbélyeg-konstansok feloldósorozata dátum-, idő- vagy időbélyegparaméterhez kötött karakterváltozóban is elhelyezhető. Az alábbi kód például egy karakterváltozóhoz kötött dátumparamétert használ az 1023-ás értékesítési rendelés nyitott dátumának frissítéséhez a Rendelések táblában:

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

A paramétert azonban általában hatékonyabb közvetlenül dátumstruktúrához kötni:

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

Annak megállapításához, hogy egy illesztő támogatja-e az ODBC-feloldási sorozatokat dátum-, idő- vagy időbélyeg-konstansokhoz, egy alkalmazás meghívja az SQLGetTypeInfo-t. Ha az adatforrás támogatja a dátum-, idő- vagy időbélyeg-adattípust, a megfelelő feloldási sorozatot is támogatnia kell.

Az adatforrások támogathatják az ANSI SQL-92 specifikációban definiált datetime literálokat is, amelyek eltérnek a dátum-, idő- vagy időbélyeg-konstansok ODBC-feloldási sorozataitól. Annak megállapításához, hogy egy adatforrás támogatja-e az ANSI-literálokat, egy alkalmazás meghívja az SQLGetInfo-t a SQL_ANSI_SQL_DATETIME_LITERALS lehetőséggel.

Annak megállapításához, hogy egy illesztő támogatja-e az ODBC-feloldási sorozatokat az intervallumkonstansokhoz, egy alkalmazás meghívja az SQLGetTypeInfo-t. Ha az adatforrás támogatja a datetime interval adattípust, a megfelelő feloldási sorrendet is támogatnia kell.

Az adatforrások támogathatják az ANSI SQL-92 specifikációban definiált dátum-idő literálokat is, amelyek eltérnek az ODBC-feloldási szekvenciák dátum-idő intervallum literáljaitól. Annak megállapításához, hogy egy adatforrás támogatja-e az ANSI-literálokat, egy alkalmazás meghívja az SQLGetInfo-t a SQL_ANSI_SQL_DATETIME_LITERALS lehetőséggel.