Problem:
Sie möchten eine Zeichenfolge mit Datum und Uhrzeit in einen TIME-Wert in SQL Server umwandeln.
Wir müssen eine Zeichenfolge, die einen Wochentagnamen, ein Datum und eine Uhrzeit enthält, in einen TIME-Wert umwandeln.
Lösung 1:
Wir verwenden PARSE()
Funktion. Hier ist die Abfrage, die Sie schreiben würden:
SELECT PARSE('Sunday, 2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Hier ist das Ergebnis:
11:23:11.1134505
Diskussion:
Verwenden Sie das PARSE()
Funktion zum Konvertieren einer Zeichenfolge, die einen Wochentagnamen, ein Datum und eine Uhrzeit enthält, in den Datentyp TIME. Diese Funktion nimmt den zu konvertierenden String, das Schlüsselwort AS und einen neuen Datentyp (in unserem Beispiel TIME
). ). Der String sollte einen Wert enthalten, der diesen Datentyp darstellt. In unserem Beispiel die Zeichenfolge 'February 2, 2020 11:23:11.1134505'
speichert einen Zeitwert.
Beachten Sie, dass die Uhrzeit nur ein Teil dieser Zeichenfolge ist, die auch den Namen des Wochentags enthält. Verwenden Sie nicht CONVERT()
oder CAST()
Funktionen in diesem Fall; sie geben auch einen TIME-Datentyp zurück, aber ohne den Wochentag.
Wenn Sie eine gesprochene Sprache verwenden, die sich von der Serversprache unterscheidet, fügen Sie das Schlüsselwort USING und den entsprechenden Kulturcode ein. Für die polnische Sprache würden Sie schreiben:
SELECT PARSE('Niedziela, 2 lutego 2020 11:23:11.1134505' AS TIME USING 'pl-PL' ) AS time_value;
Weitere Informationen zu Kulturparameterwerten finden Sie in der offiziellen SQL Server-Dokumentation.
In diesem Fall sollten Sie PARSE()
verwenden funktionieren, obwohl es nicht die beste Leistung hat. Wenn Sie mit einer Zeichenfolge arbeiten, die einen Zeitwert darstellt, der nicht ist um zusätzliche Daten (wie den Namen des Wochentages) zu speichern, verwenden Sie den CASE()
Funktion. Hier ist ein Beispiel.
Lösung 2:
SELECT CAST('2 February 2020 11:23:11.1134505' AS TIME ) AS time_value;
Hier ist das Ergebnis:
11:23:11.1134505
Die Zeichenfolge, die das zu konvertierende Datum und die Uhrzeit enthält, muss das Format des T-SQL-Datentyps für Datum und Uhrzeit haben. Weitere Informationen finden Sie in der SQL Server-Dokumentation.
Der CAST()
Funktion ist ANSI SQL Standard und ihre Leistung ist besser als CONVERT()
oder PARSE()
.
Schließlich können Sie auch CONVERT()
verwenden Funktion. Sehen Sie sich das nächste Beispiel an.
Lösung 3:
SELECT CONVERT(TIME, '2 Feb, 2020 11:23:11.1134505') AS time_value;
Das Ergebnis:
11:23:11.1134505
Das CONVERT()
Die Funktion nimmt drei Argumente entgegen:den neuen Datentyp, den zu konvertierenden String und das (optional) gewünschte Format. Sie sollten diese Funktion jedoch nur verwenden, wenn Sie angeben müssen, wie die Datums- und Zeitdaten formatiert werden sollen, da ihre Leistung nicht so gut ist wie CAST()
.