Dieser Artikel enthält Beispiele für die Konvertierung eines Datums Wert zu einem datetimeoffset Wert in SQL Server.
Wenn Sie ein Datum konvertieren Wert auf datetimeoffset , werden dem Wert zusätzliche Informationen hinzugefügt. Das liegt daran, dass der datetimeoffset Datentyp enthält sowohl Datums- und Zeitinformationen als auch die Zeitverschiebungsinformationen. Mit anderen Worten, der datetimeoffset Der Datentyp definiert ein Datum, das mit einer Tageszeit kombiniert wird, die Zeitzonen berücksichtigt und auf einer 24-Stunden-Uhr basiert. Das Datum Datentyp hingegen enthält nur Datumsinformationen.
Wann konvertieren wir von Datum zu datetimeoffset , wird die Uhrzeit (und der Zeitzonenoffset) automatisch zum Wert hinzugefügt. Sie können den Wert jedoch bei Bedarf jederzeit ändern (einschließlich des Zeitzonen-Offsets).
Der datetimeoffset Mit dem Datentyp können Sie auch die Genauigkeit von Sekundenbruchteilen angeben. Wenn Sie dies nicht angeben, wird eine Skala von 7 verwendet. Dies bedeutet, dass 7 Ziffern auf der rechten Seite des Dezimalkommas enthalten sind.
Beispiel 1 – Implizite Konvertierung
Hier ist ein Beispiel für eine implizite Konvertierung zwischen date und datetimeoffset .
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
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 datetimeoffset Variable.
Wir können das Datum sehen Variable enthält nur Datumsinformationen, während datetimeoffset Die Variable enthält Informationen zu Datum, Uhrzeit und Zeitzonenoffset.
Beim Umrechnen zwischen Datum und datetimeoffset(7) (d. h. unter Verwendung einer Skala von 7) wird die Zeitkomponente auf 00:00:00.0000000 +00:00
gesetzt . Dies ist auch der Standardwert, sodass Sie den Genauigkeitswert weglassen können und eine Skala von 7 verwendet wird (was zu einer Genauigkeit von 34 führt). Sie können die Genauigkeit verringern, wenn Sie dies bevorzugen. Eine Verringerung der Genauigkeit kann auch den zum Speichern des Werts erforderlichen Speicherplatz verringern.
Nur um es klar zu sagen, skaliert ist die Anzahl der Stellen rechts vom Dezimalkomma einer Zahl. Präzision ist die Gesamtzahl der Stellen in der Nummer.
Beispiel 2 – 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 datetimeoffset .
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', CAST(@thedate AS datetimeoffset) AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
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, 7, CAST(@thedate AS datetimeoffset)) AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Beachten Sie, dass Sie DATEADD()
nicht verwenden können Funktion zum Ändern der Zeitversatzkomponente. Aber keine Sorge, es gibt eine Möglichkeit, es zu ändern (lesen Sie weiter, um herauszufinden, wie).
Beispiel 3 – 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(datetimeoffset, @thedate) AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | +------------+------------------------------------+
Und die Uhrzeit anpassen:
DECLARE @thedate date SET @thedate = '2020-12-01' SELECT @thedate AS 'date', DATEADD(hour, 7, CONVERT(datetimeoffset, @thedate)) AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 07:00:00.0000000 +00:00 | +------------+------------------------------------+
Beispiel 4 – Ändern Sie den Zeitversatz
In den vorherigen Beispielen haben wir DATEADD()
verwendet Funktion zum Ändern des Zeitwerts. Diese Funktion kann verwendet werden, um jeden Teil der Datums- oder Zeitkomponente zu ändern, mit Ausnahme der Zeitverschiebungskomponente .
Wenn Sie den Zeitversatz ändern müssen, können Sie TODATETIMEOFFSET()
verwenden Funktion. Sie können diese Funktion auch verwenden, um das ursprüngliche Datum umzuwandeln Wert zu einem datetimeoffset Wert. Diese Funktion akzeptiert einen Datumswert (der zu datetime2 aufgelöst werden kann Wert) und einen Offset-Wert.
Hier ist ein Beispiel:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset SET @thedate = '2020-12-01' SET @thedatetimeoffset = TODATETIMEOFFSET(@thedate, '+07:00') SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
Und hier ist ein Beispiel für die Verwendung der Funktion innerhalb von SELECT
Aussage:
DECLARE @thedate date = '2020-12-01' SELECT @thedate AS 'date', TODATETIMEOFFSET(@thedate, '+07:00') AS 'datetimeoffset';
Ergebnis:
+------------+------------------------------------+ | date | datetimeoffset | |------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+
Der TODATETIMEOFFSET()
Die Funktion akzeptiert auch ein datetimeoffset value als ersten Parameter, sodass Sie ihn auch verwenden können, um das vorhandene datetimeoffset zu ändern Werte falls erforderlich.
Beispiel:
DECLARE @thedate date, @thedatetimeoffset datetimeoffset(7) SET @thedate = '2020-12-01' SET @thedatetimeoffset = @thedate SELECT @thedate AS 'date', @thedatetimeoffset AS 'datetimeoffset', TODATETIMEOFFSET(@thedatetimeoffset, '+07:00') AS 'Modified';
Ergebnis:
+------------+------------------------------------+------------------------------------+ | date | datetimeoffset | Modified | |------------+------------------------------------+------------------------------------| | 2020-12-01 | 2020-12-01 00:00:00.0000000 +00:00 | 2020-12-01 00:00:00.0000000 +07:00 | +------------+------------------------------------+------------------------------------+