Conversões de cliente nativo do SQL Server (OLE DB)

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

A seção descreve como converter valores entre os tipos datetime e datetimeoffset. As conversões descritas nesta seção já são fornecidas pelo OLE DB ou são uma extensão consistente do OLE DB.

O formato de literais e cadeias de caracteres para datas e horas no OLE DB geralmente segue a norma ISO e não depende da localidade do cliente. Uma exceção é DBTYPE_DATE, em que o padrão é Automação OLE. No entanto, como o SQL Server Native Client só converte entre tipos quando os dados são transmitidos de ou para o cliente, não há como um aplicativo forçar o SQL Server Native Client a converter entre os formatos DBTYPE_DATE e de cadeia de caracteres. Caso contrário, as cadeias de caracteres usam os formatos a seguir (texto entre colchetes indica um elemento opcional):

  • O formato das cadeias de caracteres de datetime e datetimeoffset é:

    yyyy-mm-dd[ hh:mm:ss[.9999999][ ± hh:mm]]

  • O formato de cadeias de caracteres time é:

    hh:mm:ss[.9999999]

  • O formato das cadeias de caracteres de date é:

    yyyy-mm-dd

Observação

As versões anteriores do SQL Server Native Client e SQLOLEDB implementavam conversões OLE, caso em que conversões padrão falhavam. Como resultado, algumas conversões executadas pelo SQL Server Native Client 10.0 e posterior diferem da especificação OLE DB.

As conversões de cadeias de caracteres permitem uma flexibilidade nos espaços em branco e na largura dos campos. Para obter mais informações, confira a seção "Formatos de dados: cadeias de caracteres e literais" em Suporte a tipo de dados para aprimoramentos de data e hora do OLE DB.

Seguem as regras de conversão gerais:

  • Quando uma cadeia de caracteres é convertida em um tipo de data/hora, a cadeia de caracteres é analisada primeiro como um literal ISO. Se esse procedimento falhar, a cadeia de caracteres será analisada como um literal de data OLE, que tem componentes de hora.

  • Se não houver uma hora mas o receptor puder armazenar horas, a hora será definida como zero. Se não houver uma data mas o receptor puder armazenar datas, a data será definida como a data atual quando conversões ISO forem usadas e como 1899-12-30 quando conversões OLE forem usadas.

  • Se não houver um fuso horário no tipo de dados que o cliente está utilizando mas o servidor puder armazenar fusos horários, a data no cliente será assumida como o fuso horário do cliente.

  • Se não houver nenhum fuso horário no servidor mas o cliente tiver informações de fusos horários, o fuso horário de UTC será assumido. Esse é um comportamento diferente daquele do servidor.

  • Se houver uma hora mas o receptor não puder armazenar horas, o componente de hora será ignorado.

  • Se houver uma data mas o receptor não puder armazenar datas, o componente de data será ignorado.

  • Se ocorrer o truncamento de segundos ou segundos fracionários ao converter de cliente em servidor, DB_E_ERRORSOCCURRED será retornado e o status DBSTATUS_E_DATAOVERFLOW será definido.

  • Se ocorrer o truncamento de segundos ou segundos fracionários ao converter de servidor em cliente, DBSTATUS_S_TRUNCATED será definido.

Nesta seção

Conversões executadas do cliente para o servidor
Descreve as conversões de data/hora executadas entre um aplicativo cliente escrito com o OLE DB do SQL Server Native Client e o SQL Server 2008 (10.0.x) (ou posterior).

Conversões executadas do servidor para o cliente
Descreve as conversões de data/hora executadas entre o SQL Server 2008 (10.0.x) (ou posterior) e um aplicativo cliente escrito com o OLE DB do SQL Server Native Client.

Confira também

Melhorias de data e hora (OLE DB)