Eu queria saber qual é a diferença entre os dois métodos a seguir:
GETUTCDATE()-2
e
DATEADD(d,-2,GETUTCDATE())
Eu acho que usar DATEADD
é a maneira correta, mas queria saber por que?
fonte
Eu queria saber qual é a diferença entre os dois métodos a seguir:
GETUTCDATE()-2
e
DATEADD(d,-2,GETUTCDATE())
Eu acho que usar DATEADD
é a maneira correta, mas queria saber por que?
Não há nenhuma diferença real, mas quando você começa a usar DATETIME2
valores ou funções que retornam DATETIME2
valores, você obtém erros.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, Nível 16, Estado 2, Linha 17 Tipo de operando confronto: datetime2 é incompatível com int
Para isso, é necessário usar as funções matemáticas da data.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand fala brevemente sobre esse assunto em sua série Bad Habits to Kick .
Ao contrário do que afirma uma das outras respostas, as duas opções são oficialmente suportadas e documentadas pelo SQL Server: datetime - number
não é um comportamento indefinido.
A grande vantagem de
DATEADD(d, -2, GETUTCDATE())
é o fato de ser auto-documentado : seu objetivo é imediatamente óbvio.
GETUTCDATE() - 2
, por outro lado, conta com o leitor que conhece a definição da datetime - number
operação. Sim, atualmente pode ser o T-SQL idiomático, mas o fato de isso não ser mais suportado datetime2
implica que as gerações futuras de desenvolvedores do SQL Server talvez não estejam mais familiarizadas com ele.
date
foi adicionada). Está um pouco bagunçado.