SQL Server Convert Datetime to Date: Guia Completo para Desenvolvedores
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!

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écnica | Vantagens | Desvantagens |
|---|---|---|
CAST() | Rápido, compatível | Nenhuma |
CONVERT() | Controle de estilos | Nenhuma significativa |
LEFT() e VARCHAR | Para exibição formatada | Não é adequado para filtros |
FORMAT() | Flexibilidade de formatação | Mais 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
datepara facilitar operações e otimizar desempenho. - Use intervalos de datas ao fazer filtros com
datetimepara evitar o impacto da conversão. - Para relatórios, consuma os dados já convertidos na consulta com
CAST()ouCONVERT()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
- Documentação oficial Microsoft SQL Server - CAST
- Documentação oficial Microsoft SQL Server - CONVERT
- Introdução ao uso de índices e desempenho no SQL Server
Quer se aprofundar mais? Acompanhe nossos artigos e aprimore suas habilidades em SQL Server!
MDBF