Como obter a data atual sem a parte da hora

83

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

Piers Myers
fonte

Respostas:

119

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.

  • ontem: DATEADD(day, DATEDIFF(day, 0, GETDATE()), -1)
  • início do mês: DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0)
  • final do mês passado: DATEADD(month, DATEDIFF(month, 0, GETDATE()), -1)
  • início do próximo mês: 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.

gbn
fonte
11
O link fornecido está inoperante.
Viswanathan Iyer
6

Você deve convertê-lo em varchar especificando um padrão de formato (110 neste caso) e depois converter (ou converter) de volta em data e hora.

select getdate(), cast(convert(varchar(10), getdate(), 110) as datetime)
Mrdenny
fonte