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

So extrahieren oder konvertieren Sie Zeitdaten aus einer Zeichenfolge in SQL Server

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() .