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

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

Wenn Sie mit SQL Server arbeiten, haben Sie wahrscheinlich mindestens einen der CONVERT()-Befehle verwendet oder CAST() Funktionen zum Konvertieren von einem Datentyp in einen anderen. Wenn Sie jemals beim Versuch, eine Zeichenfolge in einen Datums-/Uhrzeitdatentyp zu konvertieren, auf einen Fehler gestoßen sind, wird die Datei PARSE() Funktion könnte das sein, was Sie brauchen.

Wenn Sie beispielsweise eine Zeichenfolge wie Fr, 20. Juli 2018 haben , das CONVERT() oder CAST() Funktionen werden einen Fehler ausgeben. Aber die PARSE() Funktion wird es ohne Probleme handhaben.

Das PARSE() Die Funktion gibt das Ergebnis eines Ausdrucks zurück, übersetzt in den angeforderten Datentyp in SQL Server. Sie können es also verwenden, um Ihren Zeichenfolgenwert in einen Datums-/Zeitdatentyp (z. B. Datum) zu „übersetzen“. , datetime , datetime2 usw.).

Syntax

Hier ist die Syntax für PARSE() Funktion:

PARSE ( string_value AS data_type [ USING culture ] )

Wobei string_value ist der Wert, den Sie analysieren möchten, data_type ist der Datentyp, in den es geparst werden soll, und culture ist ein optionales Argument, mit dem Sie angeben können, welches Sprachformat beim Analysieren der Zeichenfolge verwendet werden soll.

Einfaches Beispiel

Hier ist ein einfaches Beispiel, um die Verwendung zu demonstrieren.

SELECT PARSE('Friday, 20 July 2018' AS datetime2) 
AS 'Result';

Ergebnis:

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

Entfernen Sie den Zeitteil

Im vorherigen Beispiel haben wir angegeben, dass die Zeichenfolge als datetime2 geparst werden soll Datentyp. Dieser Datentyp beinhaltet die Zeitkomponente mit hoher Genauigkeit. Wenn Sie die Zeitkomponente nicht benötigen, können Sie sie jederzeit als Datum parsen Datentyp.

Hier ist das Ergebnis, wenn wir ein Datum angeben Datentyp:

SELECT PARSE('Friday, 20 July 2018' AS date) 
AS 'Result';

Ergebnis:

+------------+
| Result     |
|------------|
| 2018-07-20 |
+------------+

Behalten Sie den Zeitteil bei, aber mit weniger Genauigkeit

Und wenn Sie tun brauchen die Zeit, aber mit weniger Genauigkeit können Sie immer die smalldatetime verwenden Datentyp:

SELECT PARSE('2:35:50pm, Friday, 20 July 2018' AS smalldatetime) 
AS 'Result';

Ergebnis:

+---------------------+
| Result              |
|---------------------|
| 2018-07-20 14:36:00 |
+---------------------+

Aber wenn das nicht genau genug ist, gibt es immer noch die datetime Datentyp:

SELECT PARSE('2:35:50.5234pm, Friday, 20 July 2018' AS datetime) 
AS 'Result';

Ergebnis:

+-------------------------+
| Result                  |
|-------------------------|
| 2018-07-20 14:35:50.523 |
+-------------------------+

Varianten der Datumseingabe

Das PARSE() Die Funktion kann normalerweise das Datum ermitteln, das Sie konvertieren möchten, solange Sie es als gültige Darstellung des angeforderten Datentyps bereitstellen. Hier sind einige Beispiele für das Datum, das in verschiedenen Stilen bereitgestellt wird:

SELECT 
    PARSE('Friday, 20 July 2018' AS date) AS 'Result 1',
    PARSE('Fri, 20 July 2018' AS date) AS 'Result 2',
    PARSE('Friday, July 20 2018' AS date) AS 'Result 3',
    PARSE('Fri 20 Jul 18' AS date) AS 'Result 4';

Ergebnis:

+------------+------------+------------+------------+
| Result 1   | Result 2   | Result 3   | Result 4   |
|------------+------------+------------+------------|
| 2018-07-20 | 2018-07-20 | 2018-07-20 | 2018-07-20 |
+------------+------------+------------+------------+

Es ist jedoch nicht hellseherisch:

SELECT PARSE('Next Friday' AS date) 
AS 'Result';

Ergebnis:

Error converting string value 'Next Friday' into data type date using culture ''. 

Kultur hinzufügen

Sie können ein drittes Argument hinzufügen, um anzugeben, in welcher Kultur Ihre Zeichenfolge formatiert ist. Zum Beispiel, wenn Ihr Datum 01/06/2018 ist , könnte dies entweder 6. Januar 2018 bedeuten oder 1. Juni 2018 , abhängig von der verwendeten Kultur.

Hier ist ein Beispiel für die Angabe der Kultur:

SELECT 
    PARSE('01/06/2018' AS date USING 'en-US') AS 'en-US',
    PARSE('01/06/2018' AS date USING 'en-GB') AS 'en-GB';

Ergebnis:

+------------+------------+
| en-US      | en-GB      |
|------------+------------|
| 2018-01-06 | 2018-06-01 |
+------------+------------+

Wenn Sie dieses Argument nicht angeben, wird die Sprache der aktuellen Sitzung verwendet.

Angabe des falschen Wochentags

Das PARSE() Die Funktion ist ziemlich intelligent, da sie einen Fehler zurückgibt, wenn Sie den falschen Wochentag angeben.

Wenn wir also dasselbe Datum wie in den vorherigen Beispielen verwenden, aber den Wochentag von Freitag auf Donnerstag ändern, passiert Folgendes:

SELECT PARSE('Thursday, 20 July 2018' AS date) 
AS 'Result';

Ergebnis:

Error converting string value 'Thursday, 20 July 2018' into data type date using culture ''.