Harfiah Tanggal, Waktu, dan Stempel waktu

Urutan escape untuk literal tanggal, waktu, dan tanda waktu adalah

{-type'value'}

di mana jenis harfiah adalah salah satu nilai yang tercantum dalam tabel berikut.

jenis harfiah Makna Format nilai
d Date yyyy-mm-dd
T Waktu* hh:mm:ss[1]
Ts Tanda Waktu yyyy-mm-ddhh:mm:ss[.f...] [1]

[1] Jumlah digit di sebelah kanan titik desimal dalam waktu atau interval tanda waktu literal yang berisi komponen detik tergantung pada presisi detik, seperti yang terkandung dalam bidang deskriptor SQL_DESC_PRECISION. (Untuk informasi selengkapnya, lihat SQLSetDescField.)

Untuk informasi selengkapnya tentang urutan escape tanggal, waktu, dan tanda waktu, lihat Urutan Escape Tanggal, Waktu, dan Tanda Waktu di Lampiran C: Tata Bahasa SQL.

Misalnya, kedua pernyataan SQL berikut memperbarui tanggal terbuka pesanan penjualan 1023 dalam tabel Pesanan. Pernyataan pertama menggunakan sintaks urutan escape. Pernyataan kedua menggunakan sintaksis asli Oracle Rdb untuk kolom DATE dan tidak dapat dioperasikan.

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

Urutan escape untuk tanggal, waktu, atau tanda waktu literal juga dapat ditempatkan dalam variabel karakter yang terikat ke parameter tanggal, waktu, atau tanda waktu. Misalnya, kode berikut menggunakan parameter tanggal yang terikat ke variabel karakter untuk memperbarui tanggal terbuka pesanan penjualan 1023 dalam tabel Pesanan:

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

Namun, biasanya lebih efisien untuk mengikat parameter langsung ke struktur tanggal:

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

Untuk menentukan apakah driver mendukung urutan escape ODBC untuk literal tanggal, waktu, atau tanda waktu, aplikasi memanggil SQLGetTypeInfo. Jika sumber data mendukung jenis data tanggal, waktu, atau tanda waktu, sumber data juga harus mendukung urutan escape yang sesuai.

Sumber data juga dapat mendukung literal tanggalwaktu yang ditentukan dalam spesifikasi ANSI SQL-92, yang berbeda dari urutan escape ODBC untuk literal tanggal, waktu, atau tanda waktu. Untuk menentukan apakah sumber data mendukung harfiah ANSI, aplikasi memanggil SQLGetInfo dengan opsi SQL_ANSI_SQL_DATETIME_LITERALS.

Untuk menentukan apakah driver mendukung urutan escape ODBC untuk literal interval, aplikasi memanggil SQLGetTypeInfo. Jika sumber data mendukung jenis data interval tanggalwaktu, sumber data juga harus mendukung urutan escape yang sesuai.

Sumber data juga dapat mendukung literal tanggalwaktu yang ditentukan dalam spesifikasi ANSI SQL-92, yang berbeda dari urutan escape ODBC untuk literal interval tanggalwaktu. Untuk menentukan apakah sumber data mendukung harfiah ANSI, aplikasi memanggil SQLGetInfo dengan opsi SQL_ANSI_SQL_DATETIME_LITERALS.