Мне было интересно, в чем разница между следующими двумя методами:
GETUTCDATE()-2
и
DATEADD(d,-2,GETUTCDATE())
Я думаю, использование DATEADD
является правильным способом, но было интересно, почему?
источник
Мне было интересно, в чем разница между следующими двумя методами:
GETUTCDATE()-2
и
DATEADD(d,-2,GETUTCDATE())
Я думаю, использование DATEADD
является правильным способом, но было интересно, почему?
Там нет никакой разницы, но когда вы начнете использовать DATETIME2
значения или функции, которые возвращают DATETIME2
значения, вы получите ошибки.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Сообщение 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
была добавлена). Это немного грязно.