Partilhar via


Data, hora e literais de carimbo de data/hora

A sintaxe de escape para data, hora e literais de carimbo de data/hora é a seguinte:

{ -type ' value '}

onde literal-type é um dos valores listados na tabela a seguir.

literal-type Significado Formato do valor
d Data yyyy-mm-dd
t Hora* hh:mm:ss [1]
ts Timestamp aaaa-mm-dd hh:mm:ss[.f...][1]

[1] O número de dígitos à direita do ponto decimal em um literal de intervalo de data/hora ou data/hora que contém um componente de segundos depende da precisão dos segundos, conforme contido no campo SQL_DESC_PRECISION descritor. (Para obter mais informações, consulte SQLSetDescField.)

Para obter mais informações sobre as sequências de escape de data, hora e carimbo de data/hora, consulte Sequências de escape de data, hora e carimbo de data/hora no Apêndice C: Gramática SQL.

Por exemplo, ambas as instruções SQL a seguir atualizam a data de abertura da ordem do cliente 1023 na tabela Pedidos. A primeira instrução usa a sintaxe de sequência de escape. A segunda instrução usa a sintaxe nativa do 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 em uma variável de caractere vinculada a um parâmetro de data, hora ou carimbo de data/hora. Por exemplo, o código a seguir usa um parâmetro de data vinculado a uma variável de caractere para atualizar a data de abertura da ordem de venda 1023 na tabela Pedidos:

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 vincular o parâmetro diretamente a uma estrutura de data:

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 oferece suporte às sequências de escape ODBC para literais de data, hora ou carimbo de data/hora, um aplicativo chama SQLGetTypeInfo. Se a fonte de dados oferecer suporte a um tipo de dados data, hora ou carimbo de data/hora, ela também deverá oferecer suporte à sequência de escape correspondente.

As fontes de dados também podem oferecer suporte aos literais datetime 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 oferece suporte aos literais ANSI, um aplicativo chama SQLGetInfo com a opção SQL_ANSI_SQL_DATETIME_LITERALS.

Para determinar se um driver oferece suporte a sequências de escape ODBC para literais de intervalo, um aplicativo chama SQLGetTypeInfo. Se a fonte de dados oferecer suporte a um tipo de dados de intervalo datetime, ela também deverá oferecer suporte à sequência de escape correspondente.

As fontes de dados também podem oferecer suporte aos literais datetime definidos na especificação ANSI SQL-92, que são diferentes das sequências de escape ODBC para literais de intervalo datetime. Para determinar se uma fonte de dados oferece suporte aos literais ANSI, um aplicativo chama SQLGetInfo com a opção SQL_ANSI_SQL_DATETIME_LITERALS.