No SQL Server 2005, como obtenho a data atual sem a parte da hora? Estou usando GETDATE(), mas gostaria que tivesse um tempo de 00: 00: 00.0

Resposta

O mais rápido se você tiver que iterar em 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: Um , Dois

As conversões Varchar são uma das piores maneiras de fazer isso. Claro, para um valor pode não importar, mas é “um bom hábito a se adquirir.

Essa forma também é determinística , diga 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

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)
  • fim do último mês: 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 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. correto, mas você pode querer selecionar 100k linhas ou adicionar uma coluna computada ou GROUP BY somente data. Então você tem que usar este método.

A outra resposta também menciona o estilo 110. Isso não é idioma ou SET DATEFORMAT seguro e falha com a configuração de idioma “british”. Veja o guia definitivo para tipos de dados datetime de Tibor Karaszi.

Comentários

  • Lin fornecido k está morto.

Resposta

Você deve convertê-lo para varchar especificando um padrão de formato (110 neste caso), em seguida, converter (ou lançar) de volta para data e hora.

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

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *