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

PARSE() vs. TRY_PARSE() in SQL Server:Was ist der Unterschied?

In SQL Server das PARSE() und TRY_PARSE() Funktionen werden verwendet, um einen Wert in einen anderen Datentyp zu übersetzen. Sie tun im Wesentlichen dasselbe, mit einer Ausnahme; wie sie mit Fehlern umgehen.

Wenn PARSE() schlägt fehl, wenn versucht wird, einen anderen Datentyp zu analysieren, wird ein Fehler zurückgegeben. Wenn TRY_PARSE() fehlschlägt, wird NULL zurückgegeben .

Beispiel 1 – Zuerst die Ähnlichkeiten

Hier ist ein Beispiel, das zeigt, wie beide Funktionen dasselbe Ergebnis zurückgeben, wenn sie den Wert erfolgreich in den erforderlichen Datentyp parsen können:

SELECT 
    PARSE('Fri, 8 June 2018' AS date) AS PARSE,
    PARSE('Fri, 8 June 2018' AS date) AS TRY_PARSE;

Ergebnis:

+------------+-------------+
| PARSE      | TRY_PARSE   |
|------------+-------------|
| 2018-06-08 | 2018-06-08  |
+------------+-------------+

Wie erwartet geben beide genau das gleiche Ergebnis zurück.

Aber mal sehen, was passiert, wenn sie den Wert nicht in den erforderlichen Datentyp parsen können.

Beispiel 2 – Wenn PARSE() fehlschlägt

Hier ist ein Beispiel dafür, was passiert, wenn PARSE() kann einen Wert nicht in einen anderen Wert parsen:

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

Ergebnis:

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

Der Vorgang schlägt fehl, weil ich keine gültige Darstellung des angeforderten Datentyps bereitgestellt habe. Mit anderen Worten, PARSE() Next year kann nicht konvertiert werden in ein Date Datentyp wie gewünscht.

Beispiel 3 – Wenn TRY_PARSE() fehlschlägt

Hier ist ein Beispiel, wenn wir versuchen, denselben Wert mit TRY_PARSE() zu parsen :

SELECT TRY_PARSE('Next year' AS date) AS Result;

Ergebnis:

+----------+
| Result   |
|----------|
| NULL     |
+----------+

Die Analyse schlägt immer noch fehl, gibt aber NULL zurück anstelle eines Fehlers.

Beispiel 4 – Verwendung von TRY_PARSE() mit einer bedingten Anweisung

Wir können TRY_PARSE() nehmen und teste seinen Rückgabewert. Wenn es sich um einen NULL-Wert handelt, können wir eine Sache zurückgeben, wenn es sich um einen Nicht-NULL-Wert handelt, können wir eine andere zurückgeben:

SELECT 
    CASE WHEN TRY_PARSE('Next year' AS date) IS NULL
        THEN 'Conversion failed'
        ELSE 'Conversion succeeded'
    END
AS Result;

Ergebnis:

+-------------------+
| Result            |
|-------------------|
| Conversion failed |
+-------------------+

Beispiel 5 – TRY_PARSE() mit Fehler

Nur weil TRY_PARSE() in den obigen Beispielen nicht zu einem Fehler führt, bedeutet dies nicht, dass dies nie der Fall ist führt zu einem Fehler. Es kann vorkommen, dass Sie bei der Verwendung dieser Funktion dennoch einen Fehler erhalten.

Beispielsweise erhalten Sie eine Fehlermeldung, wenn Sie einen ungültigen Wert als culture angeben Argument:

SELECT TRY_PARSE('Next year' AS date USING 'Mars') AS Result;

Ergebnis:

The culture parameter 'Mars' provided in the function call is not supported. 

Einige Anmerkungen zu diesen Funktionen

Hier sind einige Punkte, die Microsoft zu diesen Funktionen zu sagen hat:

  • Es wird empfohlen, dass Sie PARSE() verwenden und TRY_PARSE() nur zum Konvertieren von Zeichenfolgen in Datums-/Uhrzeit- und Zahlentypen. Verwenden Sie für andere Datentypen CAST() oder CONVERT() .
  • Diese Funktionen sind auf das Vorhandensein von .NET Framework Common Language Runtime (CLR) angewiesen.
  • Beim Parsen des String-Werts gibt es einen gewissen Performance-Overhead.
  • Diese Funktionen werden nicht entfernt, da sie vom Vorhandensein der CLR abhängen. Der Versuch, eine Funktion zu entfernen, die die CLR erfordert, würde einen Fehler auf dem Remote-Server verursachen.