Odpowiedzi:
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.