In SQL Server können Sie den CONVERT()
verwenden Funktion zum Konvertieren eines Datumswerts von einem Datumsdatentyp in einen anderen (oder zwischen jedem anderen Datentyp). Dies ist jedoch nicht die einzige Funktion in der T-SQL-Toolbox zum Konvertieren zwischen Datentypen.
Der CAST()
Die Funktion ist Teil des ANSI-SQL-Standards und erledigt die meisten Dinge CONVERT()
tut. So haben Sie in vielen Fällen die Wahl, welche dieser Funktionen Sie bevorzugen.
Viele Datenbankprofis bevorzugen CAST()
aufgrund der Tatsache, dass es Teil des ANSI-SQL-Standards ist, bevorzugen andere jedoch CONVERT()
aufgrund der zusätzlichen Funktionalität, die die T-SQL-Implementierung bietet (z. B. die Möglichkeit, einen Datumsstil bereitzustellen).
In jedem Fall enthält dieser Artikel Beispiele für die Konvertierung zwischen verschiedenen Datumsformaten mit CAST()
.
Syntax
Die Syntax lautet wie folgt:
CAST ( expression AS data_type [ ( length ) ] )
Diese Argumente sind wie folgt definiert:
expression
- Jeder gültige Ausdruck.
data_type
- Der Zieldatentyp. Dazu gehört xml , bigint und sql_variant . Alias-Datentypen können nicht verwendet werden.
length
- Eine optionale ganze Zahl, die die Länge des Zieldatentyps angibt. Der Standardwert ist
30
.
Beispiel 1 – SYSDATETIME() als Datum umwandeln
In diesem Beispiel generieren wir das aktuelle Datum/Uhrzeit mit dem SYSDATETIME()
Funktion und wandeln Sie den Rückgabewert in ein Datum um Datentyp.
Beachten Sie, dass SYSDATETIME()
generiert seinen Wert als datetime2(7) Datentyp, also konvertieren wir ihn von diesem Datentyp in einen anderen Datentyp.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS date) AS Converted;
Ergebnis:
+-----------------------------+-------------+ | Original | Converted | |-----------------------------+-------------| | 2018-06-07 00:15:32.9265884 | 2018-06-07 | +-----------------------------+-------------+
Beispiel 2 – Cast SYSDATETIME() als smalldatetime
In diesem Beispiel wandeln wir das Datum als smalldatetime um Datentyp.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS smalldatetime) AS Converted;
Ergebnis:
+-----------------------------+---------------------+ | Original | Converted | |-----------------------------+---------------------| | 2018-06-07 00:16:05.5142017 | 2018-06-07 00:16:00 | +-----------------------------+---------------------+
Beispiel 3 – Cast SYSDATETIME() als datetimeoffset
In diesem Beispiel wandeln wir das Datum als datetimeoffset um Datentyp.
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS datetimeoffset) AS Converted;
Ergebnis:
+-----------------------------+------------------------------------+ | Original | Converted | |-----------------------------+------------------------------------| | 2018-06-07 10:19:23.9457462 | 2018-06-07 10:19:23.9457462 +00:00 | +-----------------------------+------------------------------------+
Beispiel 4 – Wandeln Sie SYSDATETIME() als Zeit um
Sie sind nicht darauf beschränkt, die Datumskomponente des Werts anzuzeigen. Sie können es auch als Zeit übertragen Datentyp, sodass nur die Zeitkomponente zurückgegeben wird. So:
SELECT SYSDATETIME() AS Original, CAST(SYSDATETIME() AS time) AS Converted;
Ergebnis:
+-----------------------------+------------------+ | Original | Converted | |-----------------------------+------------------| | 2018-06-07 00:20:21.5829364 | 00:20:21.5829364 | +-----------------------------+------------------+
Beispiel 5 – SYSDATETIMEOFFSET() als Datum umwandeln
Hier ist ein Beispiel, das eine andere Funktion verwendet, um den ursprünglichen Datums-/Uhrzeitwert zu generieren:
SELECT SYSDATETIMEOFFSET() AS Original, CAST(SYSDATETIMEOFFSET() AS date) AS Converted;
Ergebnis:
+------------------------------------+----------------------+ | Original | Converted | |------------------------------------+----------------------| | 2018-06-07 10:21:16.3617030 +10:00 | 2018-06-07 | +------------------------------------+----------------------+
Beispiel 6 – Konvertieren aus einer Datenbankabfrage
Hier ist ein Beispiel für die Konvertierung des Datums, das aus einer Spalte in WideWorldImporters abgerufen wird Beispieldatenbank:
USE WideWorldImporters; SELECT DISTINCT TOP 10 LastEditedWhen, CAST(LastEditedWhen AS date) AS 'Converted' FROM Sales.CustomerTransactions;
Ergebnis:
+-----------------------------+-------------+ | LastEditedWhen | Converted | |-----------------------------+-------------| | 2013-01-02 11:30:00.0000000 | 2013-01-02 | | 2013-01-03 11:30:00.0000000 | 2013-01-03 | | 2013-01-04 11:30:00.0000000 | 2013-01-04 | | 2013-01-05 11:30:00.0000000 | 2013-01-05 | | 2013-01-06 11:30:00.0000000 | 2013-01-06 | | 2013-01-08 11:30:00.0000000 | 2013-01-08 | | 2013-01-09 11:30:00.0000000 | 2013-01-09 | | 2013-01-10 11:30:00.0000000 | 2013-01-10 | | 2013-01-11 11:30:00.0000000 | 2013-01-11 | | 2013-01-12 11:30:00.0000000 | 2013-01-12 | +-----------------------------+-------------+
Ich habe auch einen Beitrag geschrieben, der zeigt, wie man mit CONVERT()
zwischen Datumsformaten konvertiert Funktion mit denselben Beispielen wie oben.