Partilhar via


Conversões (OLE DB)

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Baixar driver OLE DB

Esta secção discute como converter entre valores de deslocamento de data-hora e data-hora . As conversões descritas nesta secção já são fornecidas pelo OLE DB ou são uma extensão consistente do OLE DB.

O formato dos literais e strings para datas e horas no OLE DB geralmente segue ISO e não depende da localização do cliente. Uma exceção é DBTYPE_DATE, onde o padrão é a Automação OLE. No entanto, como o OLE DB Driver para SQL Server só converte entre tipos quando os dados são transmitidos para ou do cliente, não há forma de uma aplicação forçar o OLE DB Driver para SQL Server a converter entre formatos DBTYPE_DATE e string. Caso contrário, as strings usam os seguintes formatos (o texto entre parênteses indica um elemento opcional):

  • O formato das cadeias de data-hora e datatimeoffset é:

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

  • O formato das cadeias de tempo é:

    hh:mm:ss[.9999999]

  • O formato das cadeias de datas é:

    yyyy-mm-dd

Observação

Versões anteriores do SQL Server Native Client e SQLOLEDB implementavam conversões em OLE, caso as conversões padrão falhassem. O Driver OLE DB para SQL Server segue o mesmo comportamento do SQL Server Native Client. Como resultado, algumas conversões realizadas pelo OLE DB Driver para SQL Server diferem da especificação OLE DB.

As conversões a partir de cadeias permitem flexibilidade no espaço em branco e na largura do campo. Para mais informações, consulte a secção "Formatos de Dados: Strings e Literais" em Suporte a Tipos de Dados para Melhorias de Data e Hora do OLE DB.

As seguintes são as regras gerais de conversão:

  • Quando uma cadeia é convertida para um tipo data/hora, a cadeia é primeiro analisada como um literal ISO. Se isto falhar, a cadeia é analisada como um literal de data OLE, que tem componentes temporais.

  • Se não houver tempo presente mas o recetor puder armazenar o tempo, o tempo é definido para zero. Se não houver data presente mas o recetor puder armazenar uma data, a data é definida para a data atual quando são usadas conversões ISO e para 1899-12-30 quando são usadas conversões OLE.

  • Se não houver um fuso horário presente no tipo de dado que o cliente está a usar, mas o servidor puder armazenar o fuso horário, assume-se que os dados do cliente estão no fuso horário do cliente.

  • Se não houver nenhum fuso horário presente no servidor mas o cliente tiver informação do fuso horário, assume-se o fuso horário UTC. Isto difere do comportamento do servidor.

  • Se o tempo estiver presente mas o recetor não puder armazenar o tempo, o componente temporal é ignorado.

  • Se a data estiver presente mas o destinatário não conseguir armazená-la, o componente de data é ignorado.

  • Se ocorrer truncamento de segundos ou frações de segundos ao converter de cliente para servidor, DB_E_ERRORSOCCURRED é devolvido e o DBSTATUS_E_DATAOVERFLOW de estado é definido.

  • Se ocorrer truncamento de segundos ou fracções de segundos ao converter do servidor para o cliente, DBSTATUS_S_TRUNCATED está definido

Na presente seção

Conversões Realizadas de Cliente para Servidor
Descreve conversões de data/hora realizadas entre uma aplicação cliente escrita com o OLE DB Driver para SQL Server 2008 (10.0.x) e versões posteriores.

Conversões Realizadas de Servidor para Cliente
Descreve as conversões de data/hora realizadas entre SQL Server 2008 (10.0.x) e versões posteriores, e uma aplicação cliente escrita com o OLE DB Driver para SQL Server.

Ver também

Melhorias de Data e Hora (OLE DB)