In SQL Server können Sie die Funktion T-SQL DATEDIFF() verwenden, um die Differenz zwischen zwei Datumsangaben zurückzugeben. Es funktioniert mit jedem Ausdruck, der in einen Zeit-, Datums-, Smalldatetime-, Datetime-, Datetime2- oder Datetimeoffset-Wert geparst werden kann. Daher können Sie auch die Differenz zwischen den beiden Zeiten ermitteln.
Dieser Artikel enthält Beispiele für die Verwendung der Funktion DATEDIFF() in SQL Server.
Die Syntax der DATEDIFF()-Funktion lautet wie folgt:
DATEDIFF ( datepart , startdate , enddate )
wobei datepart der Teil des Datums ist, den Sie vergleichen möchten. startdate ist das erste Datum und enddate ist das Enddatum.
Die Funktionsweise besteht darin, das Startdatum vom Enddatum zu subtrahieren.
Beispiel 1
Hier ist ein einfaches Beispiel, in dem wir die Anzahl der Tage zwischen zwei Daten berechnen können:
SELECT DATEDIFF(day, '2001-01-01', '2002-01-01') AS Result;
Ergebnis:
+----------+ | Result | |----------| | 365 | +----------+
Beispiel 2
Hier ist ein weiteres Beispiel, bei dem ich zwei Variablen deklariert und ihnen zwei verschiedene Datumsangaben zugewiesen habe (ich habe DATEADD() verwendet, um 1 Jahr zum ersten Datum hinzuzufügen) . Verwenden Sie dann DATEDIFF(), um die einzelnen Datumsteile dieses Datums zurückzugeben:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 1, @date1); SELECT DATEDIFF( year, @date1, @date2 ) AS Years, DATEDIFF( quarter, @date1, @date2 ) AS Quarters, DATEDIFF( month, @date1, @date2 ) AS Months, DATEDIFF( week, @date1, @date2 ) AS Weeks, DATEDIFF( dayofyear, @date1, @date2 ) AS DayOfYear, DATEDIFF( day, @date1, @date2 ) AS Days;
Ergebnis:
+---------+------------+----------+---------+-------------+--------+ | Years | Quarters | Months | Weeks | DayOfYear | Days | |---------+------------+----------+---------+-------------+--------| | 1 | 4 | 12 | 53 | 366 | 366 | +---------+------------+----------+---------+-------------+--------+
Beispiel 3
Wie bereits erwähnt , Sie können auch den Zeitabschnitt zwischen Datumsangaben zurückgeben. Hier ist ein Beispiel für die Rückgabe von Stunden, Minuten und Sekunden zwischen Datums-/Uhrzeitwerten:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(hour, 1, @date1); SELECT DATEDIFF( hour, @date1, @date2 ) AS Hours, DATEDIFF( minute, @date1, @date2 ) AS Minutes, DATEDIFF( second, @date1, @date2 ) AS Seconds;
Ergebnis:
+---------+-----------+-----------+ | Hours | Minutes | Seconds | |---------+-----------+-----------| | 1 | 60 | 3600 | +---------+-----------+-----------+
Beispiel 4
Hier ist ein Beispiel für die Ermittlung der Anzahl der Millisekunden, Mikrosekunden und Nanosekunden zwischen zwei Datums-/Uhrzeitwerten:
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(millisecond, 1, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
Ergebnis:
+----------------+----------------+---------------+ | Milliseconds | Microseconds | Nanoseconds | |----------------+----------------+---------------| | 1 | 1000 | 1000000 | +----------------+----------------+---------------+
Beispiel 5 – Fehler!
Wenn Sie versuchen, etwas Extremes zu tun, beispielsweise die Anzahl der Nanosekunden nach 100 Jahren zurückzugeben, erhalten Sie eine Fehlermeldung. Dies liegt daran, dass DATEDIFF() einen int-Wert zurückgibt und es in 100 Jahren mehr Nanosekunden gibt, als der Datentyp int verarbeiten kann.
Was passiert, wenn Sie das versuchen?
DECLARE @date1 datetime2 = '2000-01-01 00:00:00.0000000'; DECLARE @date2 datetime2 = DATEADD(year, 100, @date1); SELECT DATEDIFF( millisecond, @date1, @date2 ) AS Milliseconds, DATEDIFF( microsecond, @date1, @date2 ) AS Microseconds, DATEDIFF( nanosecond, @date1, @date2 ) AS Nanoseconds;
Ergebnis:
The datediff function resulted in an overflow. The number of dateparts separating two date/time instances is too large. Try to use datediff with a less precise datepart.
Natürlich, wenn Sie wirklich herausfinden müssen, wie viele Nanosekunden es in 100 Jahren gibt, Dann können Sie die Funktion DATEDIFF_BIG() verwenden. Diese Funktion gibt einen vorzeichenbehafteten Bigint-Datentyp zurück, der es Ihnen ermöglicht, größere Werte als DATEDIFF() zurückzugeben.
Verwandte Empfehlungen: „MySQL-Tutorial“
Das obige ist der detaillierte Inhalt vonWie verwende ich die Datediff-Funktion in SQL? (Detaillierte Code-Erklärung). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!