Je me demandais quelle est la différence entre les deux méthodes suivantes:
GETUTCDATE()-2
et
DATEADD(d,-2,GETUTCDATE())
Je suppose que l'utilisation DATEADD
est la bonne façon, mais je me demandais pourquoi?
la source
Je me demandais quelle est la différence entre les deux méthodes suivantes:
GETUTCDATE()-2
et
DATEADD(d,-2,GETUTCDATE())
Je suppose que l'utilisation DATEADD
est la bonne façon, mais je me demandais pourquoi?
Il n'y a pas vraiment de différence, mais lorsque vous commencez à utiliser des DATETIME2
valeurs ou des fonctions qui renvoient des DATETIME2
valeurs, vous obtenez des erreurs.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Msg 206, niveau 16, état 2, ligne 17 Type d'opérande en conflit: datetime2 est incompatible avec int
Pour ceux-ci, vous devez utiliser des fonctions mathématiques de date.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand parle brièvement de ce problème dans sa série Bad Habits to Kick .
Contrairement aux affirmations de l'une des autres réponses, les deux options sont officiellement prises en charge et documentées par SQL Server: datetime - number
ce n'est pas un comportement indéfini.
Le gros avantage de
DATEADD(d, -2, GETUTCDATE())
est le fait qu'il est auto-documenté : Son but est immédiatement évident.
GETUTCDATE() - 2
, d'autre part, repose sur le lecteur connaissant la définition de l' datetime - number
opération. Oui, il pourrait être actuellement T-SQL idiomatique, mais le fait qu'il ne soit plus pris en charge datetime2
implique que les générations futures de développeurs SQL Server pourraient ne plus le connaître.
date
été ajoutée). C'est un peu désordonné.