Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A sequência de escape para data, hora e literais de timestamp é
{-type'value'}
onde o tipo literal é um dos valores listados na tabela seguinte.
| tipo literal | Meaning | Formato de valor |
|---|---|---|
| d | Date | yyyy-mm-dd |
| t | Hora* | hh:mm:ss[1] |
| TS | Data e Hora | yyyy-mm-ddhh:mm:ss[.f...][1] |
[1] O número de dígitos à direita do ponto decimal num literal de intervalo de tempo ou de carimbo temporal contendo um componente de segundos depende da precisão dos segundos, conforme contido no campo descritor SQL_DESC_PRECISION. (Para mais informações, veja SQLSetDescField.)
Para mais informações sobre as sequências de escape de data, hora e carimbo temporal, consulte Sequências de Escape de Data, Hora e Carimbo Temporal no Apêndice C: Gramática SQL.
Por exemplo, ambas as seguintes instruções SQL atualizam a data de abertura da ordem de venda 1023 na tabela de Encomendas. A primeira instrução utiliza a sintaxe da sequência de escape. A segunda instrução utiliza a sintaxe nativa Oracle Rdb para a coluna DATE e não é interoperável.
UPDATE Orders SET OpenDate={d '1995-01-15'} WHERE OrderID=1023
UPDATE Orders SET OpenDate='15-Jan-1995' WHERE OrderID=1023
A sequência de escape para um literal de data, hora ou carimbo de data/hora também pode ser colocada numa variável de carácter associada a um parâmetro de data, hora ou carimbo de data/hora. Por exemplo, o seguinte código utiliza um parâmetro de data atribuído a uma variável de carácter para atualizar a data de abertura da ordem de venda 1023 na tabela de Encomendas:
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);
No entanto, é geralmente mais eficiente associar o parâmetro diretamente a uma estrutura de datas:
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);
Para determinar se um driver suporta as sequências de escape ODBC para data, hora ou literais de timestamp, uma aplicação chama SQLGetTypeInfo. Se a fonte de dados suportar um tipo de data, hora ou carimbo temporal, deve também suportar a sequência de escape correspondente.
As fontes de dados também podem suportar os literais data-hora definidos na especificação ANSI SQL-92, que são diferentes das sequências de escape ODBC para literais de data, hora ou carimbo de data/hora. Para determinar se uma fonte de dados suporta os literais ANSI, uma aplicação chama SQLGetInfo com a opção SQL_ANSI_SQL_DATETIME_LITERALS.
Para determinar se um driver suporta as sequências de escape ODBC para literais de intervalo, uma aplicação chama SQLGetTypeInfo. Se a fonte de dados suportar um tipo de intervalo de data, deve também suportar a sequência de escape correspondente.
As fontes de dados também podem suportar os literais de data-hora definidos na especificação ANSI SQL-92, que são diferentes das sequências de escape ODBC para literais de intervalo de data-hora. Para determinar se uma fonte de dados suporta os literais ANSI, uma aplicação chama SQLGetInfo com a opção SQL_ANSI_SQL_DATETIME_LITERALS.