Associações e conversões (OLE DB)
Esta seção aborda como converter entre valores 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. Entretanto, como o SQL Server Native Client só converte entre tipos quando os dados são transmitidos para ou do cliente, não há como um aplicativo obrigar o SQL Server Native Client a converter entre DBTYPE_DATE e formatos 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 datetime e datetimeoffset é:
yyyy-mm-dd[ hh:mm:ss[.9999999][ ± hh:mm]]
O formato das cadeias de caracteres time é:
hh:mm:ss[.9999999]
O formato das cadeias de caracteres 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. Consequentemente, algumas conversões executadas pelo SQL Server Native Client 10.0 e versões posteriores 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, consulte a seção sobre cadeias de caracteres e literais dos formatos de dados em Suporte a tipos de dados para melhorias de data/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 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 (ou posterior).Conversões executadas do servidor para o cliente
Descreve conversões de data/hora executadas entre o SQL Server (ou posterior) e um aplicativo cliente escrito com o DB OLE do SQL Server 2008 Native Client.