Zastanawiałem się, jaka jest różnica między następującymi dwiema metodami:
GETUTCDATE()-2
i
DATEADD(d,-2,GETUTCDATE())
Wydaje mi się, że używanie DATEADD
jest poprawne, ale zastanawiałem się, dlaczego?
źródło
Zastanawiałem się, jaka jest różnica między następującymi dwiema metodami:
GETUTCDATE()-2
i
DATEADD(d,-2,GETUTCDATE())
Wydaje mi się, że używanie DATEADD
jest poprawne, ale zastanawiałem się, dlaczego?
Nie ma tam prawdziwej różnicy, ale kiedy zaczniesz używać DATETIME2
wartości lub funkcji, które zwracają DATETIME2
wartości, będziesz otrzymywać błędy.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, poziom 16, stan 2, wiersz 17 Zderzenie typu argumentu: datetime2 jest niezgodny z int
W tym celu musisz użyć funkcji matematycznych daty.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand krótko omawia ten problem w swojej serii Bad Habits to Kick .
W przeciwieństwie do twierdzeń zawartych w jednej z pozostałych odpowiedzi, obie opcje są oficjalnie obsługiwane i dokumentowane przez SQL Server: datetime - number
nie jest to zachowanie niezdefiniowane.
Dużą zaletą
DATEADD(d, -2, GETUTCDATE())
jest fakt, że jest to samo dokumentowanie : jego cel jest natychmiast oczywisty.
GETUTCDATE() - 2
z drugiej strony polega na tym, że czytelnik zna definicję datetime - number
operacji. Tak, może to być obecnie idiomatyczny T-SQL, ale fakt, że nie jest on już obsługiwany, datetime2
oznacza, że przyszłe pokolenia programistów SQL Server mogą nie być już z nim zaznajomione.
date
dodaną wersją 2008 (?) ). Jest trochę niechlujny.