Відповіді:
Тут немає різниці, але коли ви почнете використовувати DATETIME2значення або функції, які повертають DATETIME2значення, ви отримаєте помилки.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, рівень 16, стан 2, рядок 17 зіткнення типу операнда: datetime2 є несумісним з int
Для цього вам потрібно використовувати функції математики дати.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Аарон Бертран коротко розповідає про це питання у своїй серії « Погані звички до Кіка ».
Всупереч твердженням в одній з інших відповідей, обидва варіанти офіційно підтримуються і документуються SQL Server: datetime - numberце не визначена поведінка.
Велика перевага
DATEADD(d, -2, GETUTCDATE())
це той факт, що це самодокументування : мета його відразу очевидна.
GETUTCDATE() - 2з іншого боку, покладається на те, що читач знає визначення datetime - numberоперації. Так, це може бути ідіоматичний T-SQL, але той факт, що це більше не підтримується, datetime2означає, що майбутні покоління розробників SQL Server можуть більше не бути з ним знайомі.
dateдоданої версії 2008 (?) ). Це трохи безладно.