Ich habe mich gefragt, was der Unterschied zwischen den folgenden beiden Methoden ist:
GETUTCDATE()-2
und
DATEADD(d,-2,GETUTCDATE())
Ich denke, die Verwendung DATEADD
ist der richtige Weg, aber ich habe mich gefragt, warum?
quelle
Ich habe mich gefragt, was der Unterschied zwischen den folgenden beiden Methoden ist:
GETUTCDATE()-2
und
DATEADD(d,-2,GETUTCDATE())
Ich denke, die Verwendung DATEADD
ist der richtige Weg, aber ich habe mich gefragt, warum?
Es gibt dort keinen wirklichen Unterschied, aber wenn Sie anfangen, DATETIME2
Werte oder Funktionen zu verwenden, die DATETIME2
Werte zurückgeben, werden Fehler angezeigt.
SELECT SYSDATETIME() - 1 AS [Incompatible]
Meldung 206, Ebene 16, Status 2, Zeile 17 Kollision vom Operandentyp: datetime2 ist nicht mit int kompatibel
Für diese müssen Sie Datumsberechnungsfunktionen verwenden.
SELECT DATEADD(DAY, -1, SYSDATETIME()) AS [Compatible]
Aaron Bertrand spricht in seiner Serie Bad Habits to Kick kurz über dieses Problem .
Im Gegensatz zu den Behauptungen in einer der anderen Antworten werden beide Optionen von SQL Server offiziell unterstützt und dokumentiert : datetime - number
Es handelt sich nicht um undefiniertes Verhalten.
Der große Vorteil von
DATEADD(d, -2, GETUTCDATE())
ist die Tatsache, dass es sich selbst dokumentiert : Sein Zweck ist sofort offensichtlich.
GETUTCDATE() - 2
Auf der anderen Seite muss der Leser die Definition der datetime - number
Operation kennen. Ja, es könnte derzeit idiomatisches T-SQL sein, aber die Tatsache, dass dies nicht mehr unterstützt wird, datetime2
impliziert, dass zukünftige Generationen von SQL Server-Entwicklern möglicherweise nicht mehr damit vertraut sind.
date
hinzugefügten (?) Version existierten ). Es ist ein bisschen chaotisch.