Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Escape-последовательность для литерала даты, времени и метки времени
{ -type ' value '}
где литерал является одним из значений, перечисленных в следующей таблице.
| литеральный тип | Значение | Формат значения |
|---|---|---|
| дн. | Дата | гггг-мм-дд |
| с | Время* | hh:mm:ss[1] |
| ts | Метка времени | гггг мм--дд чч:мм:ss[.f...][1] |
[1] Число цифр справа от десятичной запятой в литерал интервала времени или метки времени, содержащего компонент секунд, зависит от точности секунд, как указано в поле дескриптора SQL_DESC_PRECISION. (Дополнительные сведения см. в разделе SQLSetDescField.)
Дополнительные сведения о последовательностях escape-меток даты, времени и метки времени см. в разделе "Даты,время" и "Метка времени" в приложении C: грамматика SQL.
Например, оба из следующих инструкций SQL обновляют открытую дату заказа на продажу 1023 в таблице "Заказы". Первая инструкция использует синтаксис escape-последовательности. Вторая инструкция использует собственный синтаксис Oracle Rdb для столбца DATE и не совместим.
UPDATE Orders SET OpenDate={d '1995-01-15'} WHERE OrderID=1023
UPDATE Orders SET OpenDate='15-Jan-1995' WHERE OrderID=1023
Escape-последовательность для литерала даты, времени или метки времени также может быть помещена в символьную переменную, привязанную к параметру даты, времени или метки времени. Например, следующий код использует параметр даты, привязанный к символьной переменной, для обновления открытой даты заказа на продажу 1023 в таблице 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);
Тем не менее, обычно это более эффективно для привязки параметра непосредственно к структуре дат:
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);
Чтобы определить, поддерживает ли драйвер escape-последовательности ODBC для литералов даты, времени или метки времени, приложение вызывает SQLGetTypeInfo. Если источник данных поддерживает тип данных даты, времени или метки времени, он также должен поддерживать соответствующую escape-последовательность.
Источники данных также могут поддерживать литералы даты и времени, определенные в спецификации ANSI SQL-92, которые отличаются от escape-последовательностей ODBC для литералов даты, времени или метки времени. Чтобы определить, поддерживает ли источник данных литералы ANSI, приложение вызывает SQLGetInfo с параметром SQL_ANSI_SQL_DATETIME_LITERALS.
Чтобы определить, поддерживает ли драйвер escape-последовательности ODBC для литерала интервалов, приложение вызывает SQLGetTypeInfo. Если источник данных поддерживает тип данных интервала даты и времени, он также должен поддерживать соответствующую escape-последовательность.
Источники данных также могут поддерживать литералы даты и времени, определенные в спецификации ANSI SQL-92, которые отличаются от escape-последовательностей ODBC для литералы интервала даты и времени. Чтобы определить, поддерживает ли источник данных литералы ANSI, приложение вызывает SQLGetInfo с параметром SQL_ANSI_SQL_DATETIME_LITERALS.