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)