sábado, 24 de setembro de 2011

SQL Server: Removendo a hora de um DATETIME

Esse post não será mais atualizado nesse blog. Para visualizar esse post em seu novo endereço, acesse:
http://milaneze.com.br/post/2011/09/23/SQL-Server-Removendo-a-hora-de-um-DATETIME.aspx


Existem várias formas de remover a hora de um valor DATETIME, porém qual é a melhor delas? Existe uma resposta bem completa nessa página do Stack Overflow: http://stackoverflow.com/questions/2775/whats-the-best-way-to-remove-the-time-portion-of-a-datetime-value-sql-server

Resumindo, no SQL Server 2008, a melhor forma seria:

DECLARE @DATA AS DATETIME
SET @DATA = CONVERT(DATE, GETDATE())


Porém, nas outras versões não existe o tipo DATE. Então, na ordem do mais rápido para o mais demorado, ficaria:

DECLARE @DATA AS DATETIME

-- mais rápido
SET @DATA = CAST(GETDATE() - 0.50000004 AS int)

-- segundo mais rápido e mais fácil de entender e lembrar
SET @DATA = DATEDIFF(DAY, 0, GETDATE())

-- terceiro mais rápido
SET @DATA = FLOOR(CAST(GETDATE() as float))


Conclusão: o melhor de se usar, por não ter muita diferença do primeiro e não confundir tanto, seria a segunda opção.

Nenhum comentário: