No SQL Server 2005, como obtenho a data atual sem a parte da hora? Eu tenho usado GETDATE()
, mas gostaria que tivesse um tempo de 00:00:00.0
relate perguntas
-
Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?
-
Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?
-
Quais são as principais causas de deadlocks e podem ser evitadas?
-
Como determinar se um Índice é necessário ou necessário
-
Downgrade do SQL Server 2008 para 2005
O mais rápido se você precisar iterar em um conjunto de registros e não tiver data no SQL Server 2008
Duas respostas diferentes e excelentes no StackOverflow confirmam isso: One , Two
As conversões do Varchar são uma das piores maneiras de fazer isso. Claro que, para um valor, pode não importar, mas é um bom hábito para adquirir.
Desta forma também é determinístico, digamos se você deseja indexar uma coluna computada. Mesmo as pessoas que escrevem livros sobre o SQL Server são apanhadas com conversões de data e hora
Esta 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 o 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 você pode querer selecionar 100 mil linhas ou adicionar uma coluna computada ou apenas GROUP BY date. Então você tem que usar este método.
A outra resposta também menciona o estilo 110. Este não é um idioma ou SET DATEFORMAT seguro e falha com a configuração de idioma "britânico". Veja o guia definitivo para os tipos de dados datetime de Tibor Karaszi.
Você precisa convertê-lo para varchar especificando um padrão de formato (110 neste caso) e depois converter (ou converter) de volta para datetime.