MDBF Logo MDBF

SQL Server Convert Datetime to Date: Guia Completo para Desenvolvedores

Artigos

No universo do desenvolvimento de bancos de dados, a manipulação de tipos de dados desempenha um papel fundamental na construção de consultas eficientes e na garantia da integridade das informações. Entre os tipos de dados mais utilizados no SQL Server estão o datetime e o date. Muitas vezes, é necessário converter um valor do tipo datetime para date para simplificar resultados, otimizar consultas ou atender a requisitos específicos de negócio.

Este artigo apresenta um guia completo sobre como realizar a conversão de datetime para date no SQL Server, abordando diversas técnicas, boas práticas, perguntas frequentes e exemplos práticos. Se você deseja aprimorar seu conhecimento em manipulação de datas, continue a leitura!

sql-server-convert-datetime-to-date

Por que Converter datetime para date?

A conversão de datetime para date é comum em cenários onde a componente horária é irrelevante para o resultado desejado, como:

  • Agrupamentos diários de registros.
  • Comparações de datas apenas.
  • Relatórios de períodos específicos.
  • Melhor performance ao evitar uso de componentes temporais desnecessárias em filtros.

Benefícios da conversão

  • Simplificação de consultas SQL.
  • Redução do uso de armazenamento de informações desnecessárias.
  • Melhoria na performance de consultas com filtros por data.

Técnicas para Converter datetime para date no SQL Server

Existem várias formas de converter um valor datetime para date. A seguir, apresentamos as principais técnicas utilizadas na prática.

1. Utilizando a Função CAST()

A maneira mais direta e compatível com versões mais antigas do SQL Server é usando o CAST().

SELECT CAST(DataHora AS DATE) AS DataSomenteFROM TabelaExemplo;

2. Utilizando a Função CONVERT()

CONVERT() oferece maior controle sobre o formato de conversão, possibilitando especificar estilos de formatação.

SELECT CONVERT(DATE, DataHora) AS DataSomenteFROM TabelaExemplo;

3. Usando CAST() ou CONVERT() juntos com LEFT()

Para extrair apenas a parte da data em formato string (não recomendado para operações de filtro).

SELECT LEFT(CONVERT(VARCHAR, DataHora, 120), 10) AS DataSomenteFROM TabelaExemplo;

Nota: Essa técnica apenas retorna uma string, não um valor do tipo date. Ela é útil para exibição, mas não para cálculos ou filtros de data.

4. Novo método com FORMAT() (SQL Server 2012+)

O FORMAT() permite formatação avançada, mas é mais lento. Use-o com cautela em grandes volumes.

SELECT FORMAT(DataHora, 'yyyy-MM-dd') AS DataFormatadaFROM TabelaExemplo;

Lembre-se, FORMAT() retorna uma string.

Considerações de Performance

TécnicaVantagensDesvantagens
CAST()Rápido, compatívelNenhuma
CONVERT()Controle de estilosNenhuma significativa
LEFT() e VARCHARPara exibição formatadaNão é adequado para filtros
FORMAT()Flexibilidade de formataçãoMais lento, uso de CPU

Para maximizar a performance, recomenda-se a utilização de CAST() ou CONVERT().

Como Utilizar a Conversão em Consultas e Indices

Exemplo de consulta com filtro por data

Suponha que você tenha uma tabela Vendas com uma coluna DataHora do tipo datetime. Para filtrar vendas ocorridas em um dia específico:

DECLARE @DataFiltro DATE = '2024-04-25';SELECT *FROM VendasWHERE CONVERT(DATE, DataHora) = @DataFiltro;

Nota importante: Usar CONVERT() na cláusula WHERE pode prejudicar a performance, pois impede o uso de índices. Para otimizar, recomenda-se criar uma coluna auxiliar ou usar intervalo de datas:

SELECT *FROM VendasWHERE DataHora >= '2024-04-25 00:00:00'  AND DataHora < '2024-04-26 00:00:00';

Criando um índice baseado em uma coluna de data filtrável

Se você realiza frequentemente filtros por data, considere criar uma coluna Data do tipo date que armazena somente a data, otimizing consultas:

ALTER TABLE VendasADD DataSimples AS CAST(DataHora AS DATE) PERSISTED;CREATE INDEX IX_Vendas_DataSimples ON Vendas(DataSimples);

Perguntas Frequentes (FAQ)

1. Qual a melhor técnica para converter datetime para date?

Para desempenho e compatibilidade, a recomendação é usar CAST(DataHora AS DATE) ou CONVERT(DATE, DataHora).

2. Como converter várias colunas de datetime para date em uma única consulta?

Basta aplicar a conversão na seleção de cada coluna:

SELECT    CAST(DataHora1 AS DATE) AS Data1,    CAST(DataHora2 AS DATE) AS Data2FROM TabelaExemplo;

3. Como fazer a conversão de datetime para date em uma coluna existente?

Para atualizar uma coluna de date existente, use:

UPDATE TabelaExemploSET DataSomente = CAST(DataHora AS DATE);

4. É possível fazer a conversão em uma variável?

Sim, exemplo:

DECLARE @DataHora DATETIME = GETDATE();DECLARE @DataOnly DATE;SET @DataOnly = CAST(@DataHora AS DATE);

Dicas de Boas Práticas

  • Sempre que possível, armazene datas em colunas específicas de tipo date para facilitar operações e otimizar desempenho.
  • Use intervalos de datas ao fazer filtros com datetime para evitar o impacto da conversão.
  • Para relatórios, consuma os dados já convertidos na consulta com CAST() ou CONVERT() para evitar processamento desnecessário.

Conclusão

A conversão de datetime para date é uma operação comum no desenvolvimento de bancos de dados SQL Server. Entender as diferentes técnicas disponíveis, suas vantagens e limitações ajuda a escrever consultas eficientes, especialmente em cenários que envolvem filtros por dia, agrupamentos e relatórios.

Para os desenvolvedores, dominar essas técnicas é fundamental para otimizar o desempenho de suas aplicações. Como afirmou o renomado especialista SQL, Itzik Ben-Gan:

“O uso eficiente das funções de conversão de tipos pode transformar consultas lentas em operações rápidas e confiáveis.”

Esperamos que este guia completo tenha esclarecido suas dúvidas e lhe fornecido as ferramentas necessárias para dominar a conversão de datetime para date no SQL Server.

Referências

Quer se aprofundar mais? Acompanhe nossos artigos e aprimore suas habilidades em SQL Server!