Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So konvertieren Sie eine Zeichenfolge in ein Datum/eine Uhrzeit in SQL Server mit CAST()

In SQL Server können Sie CAST() verwenden Funktion zum Konvertieren eines Ausdrucks eines Datentyps in einen anderen. Diese Funktion funktioniert fast genauso wie CONVERT() Funktion, außer dass die Syntax etwas anders ist (und CAST() akzeptiert den style nicht Argument).

Wenn Sie also einen String in einen Datums-/Uhrzeitwert umwandeln müssen, können Sie CONVERT() verwenden Funktion oder die CAST() Funktion.

Und wenn Sie bei der Verwendung dieser beiden Funktionen einen Fehler erhalten, wird PARSE() Funktion könnte genau das sein, was Sie brauchen.

Dieser Artikel enthält Beispiele mit CAST() Funktion.

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 xmlbigint 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 – In Datumsdatentyp konvertieren

In diesem Beispiel wandeln wir die Zeichenfolge in ein Datum um Datentyp (wir spezifizieren dies mit date als zweites Argument).

SELECT CAST('20 Dec 2018' AS date) AS Result;

Ergebnis:

+------------+
| Result     |
|------------|
| 2018-12-20 |
+------------+

Genau wie bei CONVERT() Die Zeichenfolge muss in einem Stil vorliegen, der in den angegebenen Datentyp konvertiert werden kann, andernfalls erhalten Sie einen Fehler:

SELECT CAST('Homer' AS date) AS Result;

Ergebnis:

Conversion failed when converting date and/or time from character string.

Beispiel 2 – Konvertieren in datetime-Datentyp

In diesem Beispiel konvertieren wir in datetime Datentyp:

SELECT CAST('20 Dec 2018' AS datetime) AS Result;

Ergebnis:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 00:00:00.000 |
+-------------------------+

Sie können neben dem Datum auch die Uhrzeit angeben:

SELECT CAST('2pm 20 Dec 2018' AS datetime) AS Result;

Ergebnis:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-12-20 14:00:00.000 |
+-------------------------+

Beispiel 3 – Konvertieren in den Datentyp datetime2

Hier wandeln wir in datetime2 um Datentyp:

SELECT CAST('20 Dec 2018' AS datetime2) AS Result;

Ergebnis:

+-----------------------------+
| Result                      |
|-----------------------------|
| 2018-12-20 00:00:00.0000000 |
+-----------------------------+

Beispiel 4 – Konvertieren in datetimeoffset-Datentyp

In diesem Beispiel konvertieren wir in den datetimeoffset Datentyp:

SELECT CAST('20 Dec 2018' AS datetimeoffset) AS Result;

Ergebnis:

+------------------------------------+
| Result                             |
|------------------------------------|
| 2018-12-20 00:00:00.0000000 +00:00 |
+------------------------------------+

Beispiel 5 – Konvertieren in den Datentyp smalldatetime

Hier wandeln wir in die smalldatetime um Datentyp:

SELECT CAST('20 Dec 2018' AS smalldatetime) AS Result;

Ergebnis:

+---------------------+
| Result              |
|---------------------|
| 2018-12-20 00:00:00 |
+---------------------+

Beispiel 6 – In Zeitdatentyp konvertieren

In diesem Beispiel konvertieren wir in die Zeit Datentyp:

SELECT CAST('20 Dec 2018' AS time) AS Result;

Ergebnis:

+----------+
| Result   |
|----------|
| 00:00:00 |
+----------+

In diesem Fall haben wir ein Datum, aber keine Uhrzeit angegeben, also kam es als 00:00:00 zurück . Hier ist ein weiteres Beispiel, in dem wir tatsächlich eine Zeit angeben:

SELECT CAST('2pm' AS time) AS Result;

Ergebnis:

+----------+
| Result   |
|----------|
| 14:00:00 |
+----------+

Aber wenn wir das Datum hinzufügen, erhalten wir einen Fehler (im Gegensatz zu einem früheren Beispiel, als wir in datetime konvertiert haben ):

SELECT CAST('2pm 20 Dec 2018' AS time) AS Result;

Ergebnis:

Conversion failed when converting date and/or time from character string.

In diesem Fall müssten Sie also in datetime konvertieren oder smalldatetime .

Beispiel 7 – Auslassen des Datums

Wenn Sie das Datum bei der Konvertierung in datetime weglassen oder smalldatetime Datentypen, wird 1900-01-01 zurückgegeben als Datum:

SELECT CAST('2pm' AS datetime) AS Result;

Ergebnis:

+-------------------------+
| Result                  |
|-------------------------|
| 1900-01-01 14:00:00.000 |
+-------------------------+

Wenn Sie es vorziehen, verwenden Sie CONVERT() Funktion, siehe diese Zeichenfolge zu Datum/Uhrzeit CONVERT() Beispiele mit denselben Beispielen wie oben.

Wenn Sie, wie bereits erwähnt, eine Fehlermeldung erhalten, während Sie versuchen, einen String in ein Datum umzuwandeln, versuchen Sie es mit PARSE() funktionieren stattdessen. Es funktioniert in einigen Fällen, in denen CAST() nicht.