Estritamente, o método
a
é o menos intensivo em recursos:a) select DATEADD(dd, DATEDIFF(dd, 0, getdate()), 0)
Comprovadamente menos intensivo de CPU para a mesma duração total de um milhão de linhas por alguém com muito tempo disponível:A maneira mais eficiente no SQL Server de obter uma data de data+hora?
Eu vi um teste semelhante em outro lugar com resultados semelhantes também.
Eu prefiro o DATEADD/DATEDIFF porque:
- varchar está sujeito a problemas de idioma/formato de data
Exemplo:por que minha expressão CASE não é determinística? - float depende de armazenamento interno
- ele se estende para o primeiro dia do mês, amanhã, etc., alterando a base "0"
Editar, outubro de 2011
Para SQL Server 2008+, você pode CAST para
date
ou seja, CAST(getdate() AS date)
. Ou apenas use date
tipo de dados, então não há time
remover. Editar, janeiro de 2012
Um exemplo trabalhado de como isso é flexível:precisa calcular por hora ou data arredondada no servidor sql
Editar, maio de 2012
Não use isso em cláusulas WHERE e similares sem pensar:adicionar uma função ou CAST a uma coluna invalida o uso do índice. Veja o número 2 aqui Erros comuns de programação SQL
Agora, isso tem um exemplo de versões posteriores do otimizador do SQL Server gerenciando o CAST até o momento corretamente, mas geralmente será uma má ideia...
Editar, setembro de 2018, para datetime2
DECLARE @datetime2value datetime2 = '02180912 11:45' --this is deliberately within datetime2, year 0218
DECLARE @datetime2epoch datetime2 = '19000101'
select DATEADD(dd, DATEDIFF(dd, @datetime2epoch, @datetime2value), @datetime2epoch)