Відповіді:
Тут немає різниці, але коли ви почнете використовувати 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 (?) ). Це трохи безладно.