Dieser Artikel enthält Beispiele für die Konvertierung eines Datums Wert zu einem datetime Wert in SQL Server.
Wenn Sie ein Datum konvertieren Wert auf datetime , werden dem Wert zusätzliche Informationen hinzugefügt. Das liegt daran, dass datetime Datentyp enthält sowohl Datums- als auch Zeitinformationen. Das Datum Datentyp hingegen enthält nur Datumsinformationen.
Beispiel 1 – Implizite Konvertierung
Hier ist ein Beispiel für eine implizite Konvertierung zwischen date und datetime .
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Ergebnis:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Dies ist eine implizite Konvertierung, da wir keine Konvertierungsfunktion (wie die unten) verwenden, um sie explizit zu konvertieren. In diesem Fall führt SQL Server im Hintergrund eine implizite Konvertierung durch, wenn wir versuchen, das Datum zuzuweisen Wert zu einem datetime Variable.
Wir können das Datum sehen Variable enthält nur Datumsinformationen, während datetime Variable enthält sowohl Datums- als auch Zeitinformationen.
Beim Umrechnen zwischen Datum und datetime , wird die Zeitkomponente auf 00:00:00.000
gesetzt . Dies liegt daran, dass der Datumswert keine Zeitinformationen enthält, sodass SQL Server keine Möglichkeit hat, die gewünschte Uhrzeit (falls vorhanden) zu kennen.
Beispiel 2 – Uhrzeit ändern
Wenn Sie die Zeit ändern müssen (aber dasselbe Datum beibehalten), können Sie DATEADD()
verwenden Funktion, um genau das zu tun.
DECLARE @thedate date, @thedatetime datetime SET @thedate = '2020-12-01' SET @thedatetime = @thedate SET @thedatetime = DATEADD(hour, 8, @thedatetime) SELECT @thedate AS 'date', @thedatetime AS 'datetime';
Ergebnis:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Beispiel 3 – Explizite Konvertierung mit CAST()
Hier ist ein Beispiel für eine explizite Konvertierung. In diesem Fall verwende ich den CAST()
Funktion direkt innerhalb des SELECT
Anweisung, explizit zwischen date zu konvertieren und datetime .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetime) AS 'datetime';
Ergebnis:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Wir erhalten also das gleiche Ergebnis wie bei der impliziten Konvertierung.
Wir können die Zeit auch so anpassen:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CAST(@thedate AS datetime)) AS 'datetime';
Ergebnis:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+
Beispiel 4 – Explizite Konvertierung mit CONVERT()
Hier ist ein Beispiel für eine explizite Konvertierung mit CONVERT()
Funktion anstelle von CAST()
.
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CONVERT(datetime, @thedate) AS 'datetime';
Ergebnis:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 00:00:00.000 | +------------+-------------------------+
Und die Uhrzeit anpassen:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 8, CONVERT(datetime, @thedate)) AS 'datetime';
Ergebnis:
+------------+-------------------------+ | date | datetime | |------------+-------------------------| | 2020-12-01 | 2020-12-01 08:00:00.000 | +------------+-------------------------+