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 undTRY_PARSE()
nur zum Konvertieren von Zeichenfolgen in Datums-/Uhrzeit- und Zahlentypen. Verwenden Sie für andere DatentypenCAST()
oderCONVERT()
. - 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.