No SQL Server 2005, como obtenho a data atual sem a parte da hora? Estou usando, GETDATE()
mas gostaria que ele tivesse um tempo de 00: 00: 00.0
No SQL Server 2005, como obtenho a data atual sem a parte da hora? Estou usando, GETDATE()
mas gostaria que ele tivesse um tempo de 00: 00: 00.0
Respostas:
O mais rápido se você precisar percorrer um conjunto de registros e não tiver data no SQL Server 2008
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
Duas respostas diferentes e excelentes no StackOverflow confirmam isso: Uma , Duas
As conversões Varchar são uma das piores maneiras de fazer isso. Obviamente, por um valor, pode não importar, mas é um bom hábito entrar.
Esse caminho também é determinístico, digamos, se você deseja indexar uma coluna computada. Até pessoas que escrevem livros sobre o SQL Server são surpreendidas com conversões de data e hora
Essa técnica também é extensível.
DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
DATEADD(month, DATEDIFF(month, 0, GETDATE()), 31)
Editar:
Como mencionei sobre determinismo, os métodos varchar não são seguros, a menos que você use o estilo 112.
Outras respostas aqui apontam que você nunca aplicaria isso a uma coluna. Isso está correto, mas convém selecionar 100k linhas ou adicionar uma coluna computada ou GROUP BY dateonly. Então você tem que usar esse método.
A outra resposta também menciona o estilo 110. Esse não é o idioma ou o SET DATEFORMAT é seguro e falha com a configuração do idioma "britânico". Veja o guia definitivo para os tipos de dados datetime de Tibor Karaszi.