分享方式:


日期、時間和時間戳記常值

日期、時間和時間戳記常值的逸出序列為

{ -type ' value '}

literal-type 為下表列出的值之一。

literal-type 意義 value 的格式
d Date yyyy-mm-dd
t 時間* hh:mm:ss[1]
ts 時間戳記 yyyy-mm-dd hh:mm:ss[.f...][1]

[1] 包含秒數元件的時間或時間戳記間隔常值,其小數點右側的位數取決於秒數精確度,如 SQL_DESC_PRECISION 描述項欄位中所包含的內容。 (如需詳細資訊,請參閱 SQLSetDescField。)

如需日期、時間和時間戳記逸出序列的詳細資訊,請參閱「附錄 C:SQL 文法」中的日期、時間和時間戳記逸出序列

例如,下列兩個 SQL 陳述式都會更新 [訂單] 資料表中銷售訂單 1023 的開啟日期。 第一個陳述式會使用逸出序列語法。 第二個陳述式使用 DATE 資料行的 Oracle Rdb 原生語法,而且無法互通。

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

日期、時間或時間戳記常值的逸出序列也可以放在繫結至日期、時間或時間戳記參數的字元變數中。 例如,下列程式碼會使用繫結至字元變數的日期參數,更新 [訂單] 資料表中銷售訂單 1023 的開啟日期:

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

不過,將參數直接繫結至日期結構通常會更有效率:

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

若要判斷驅動程式是否支援日期、時間或時間戳記常值的 ODBC 逸出序列,應用程式會呼叫 SQLGetTypeInfo。 如果資料來源支援日期、時間或時間戳記資料類型,它也必須支援對應的逸出序列。

資料來源也可以支援 ANSI SQL-92 規格中定義的日期時間常值,這與日期、時間或時間戳記常值的 ODBC 逸出序列不同。 若要判斷資料來源是否支援 ANSI 常值,應用程式會使用 SQL_ANSI_SQL_DATETIME_LITERALS 選項呼叫 SQLGetInfo

若要判斷驅動程式是否支援間隔常值的 ODBC 逸出序列,應用程式會呼叫 SQLGetTypeInfo。 如果資料來源支援日期時間間隔資料類型,它也必須支援對應的逸出序列。

資料來源也可以支援 ANSI SQL-92 規格中定義的日期時間常值,這與日期時間間隔常值的 ODBC 逸出序列不同。 若要判斷資料來源是否支援 ANSI 常值,應用程式會使用 SQL_ANSI_SQL_DATETIME_LITERALS 選項呼叫 SQLGetInfo