Der beste Weg, um zu verstehen, wie Datumsmathematik funktioniert, besteht darin, eine Abfrage in ihre Teile zu zerlegen.
Beginnen Sie damit:
SELECT GETUTCDATE() AS utc_date
An diesem Tag kehrt es zurück 2017-10-04 19:34:20.050
.
In der Datumsberechnung sind die Zahl 0 und das Datum 1900-01-01 austauschbar.
SELECT DATEDIFF(DAY, 0, GETUTCDATE()) AS [what does zero mean?],
DATEDIFF(DAY, '19000101', GETUTCDATE()) AS [it means 1900-01-01]
Das bedeutet, dass Sie fast jede Zahl in ein Datum umwandeln können. Auch negative Zahlen.
SELECT CONVERT(DATETIME, -1) AS [how is -1 a date?]
Dies wird zurückbringen 1899-12-31 00:00:00.000
, was dasselbe ist wie das Folgende:
SELECT DATEADD(DAY, -1, '19000101') AS [zero minus 1 days]
Nur einen Tag vom 1900-01-01 abziehen. Verrückt oder?
Wie hilft uns das?
Schauen wir uns unsere ursprüngliche Abfrage an:
SELECT DATEDIFF(DAY, 0, GETUTCDATE())
Das gibt uns die Anzahl der Tage zwischen 1900-01-01
und dem aktuellen Datum. Was bedeutet den vollen Ausdruck:
SELECT DATEADD(DAY, DATEDIFF(DAY, 0, GETUTCDATE()), 0)
Ist das Hinzufügen der Anzahl der Tage zwischen 1900-01-01
und aktuell zu 1900-01-01
. Damit beginnt der aktuelle Tag mit 0 Stunden.
Der zweite Teil macht dasselbe, außer dass 30 Tage von 1900-01-01
0 Stunden abgezogen werden.
DATEADD(DAY, DATEDIFF(DAY, 0, GETUTCDATE()), -30);
Wenn das alles zu viel ist, um sich daran zu erinnern, verstehe ich es vollkommen.
Ein Spickzettel mit wichtigen Datumsberechnungen finden Sie im Artikel von Tim Ford .
Eine Kalendertabelle mit wichtigen Daten finden Sie im Artikel von Aaron Bertrand .