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

Funktionsweise von TRY_CAST() in SQL Server

In SQL Server ist eine häufig verwendete Funktion CAST() , das einen Ausdruck eines Datentyps in einen anderen umwandelt. Wenn die Umwandlung jedoch nicht erfolgreich ist, wird ein Fehler zurückgegeben.

Geben Sie TRY_CAST() ein .

Der TRY_CAST() Funktion gibt keinen Fehler zurück, wenn die Umwandlung fehlschlägt. Stattdessen wird NULL zurückgegeben .

Es gibt jedoch einige Fälle, in denen ein Fehler zurückgegeben wird.

Syntax

Die Syntax lautet wie folgt:

TRY_CAST ( expression AS data_type [ ( length ) ] )

Wobei expression ist der zu konvertierende Ausdruck data_type ist der neue Datentyp und length ist eine optionale Länge für den neuen Datentyp.

Beispiel 1 – Cast erfolgreich

Hier ist ein Beispiel für das Casting einer Zeichenfolge als decimal :

SELECT TRY_CAST('007' AS DECIMAL(5,2));

Ergebnis:

7.00

In diesem Fall war die Umwandlung erfolgreich.

Beispiel 2 – Umwandlung schlägt fehl und gibt NULL zurück

Hier ist ein Beispiel für das Fehlschlagen der Umwandlung und NULL zurückgegeben:

SELECT TRY_CAST('Double Oh Seven!' AS DECIMAL(5,2));

Ergebnis:

NULL

Die Umwandlung ist fehlgeschlagen, also NULL wurde zurückgegeben.

Zum Vergleich, hier ist, was passiert, wenn wir CAST() verwenden statt TRY_CAST() :

SELECT CAST('Double Oh Seven!' AS DECIMAL(5,2));

Ergebnis:

Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.

Beispiel 3 – Umwandlung schlägt fehl und gibt einen Fehler zurück

Es gibt einige Fälle, in denen TRY_CAST() wird einen Fehler zurückgeben.

Wenn ein Cast explizit nicht erlaubt ist, dann gibt es einen Fehler zurück:

SELECT TRY_CAST(10 AS xml);

Ergebnis:

Msg 529, Level 16, State 2, Line 1
Explicit conversion from data type int to xml is not allowed.

Weitere Informationen

Siehe Wie CAST() Funktioniert in SQL Server für weitere Konvertierungsbeispiele und CAST() vs TRY_CAST() in SQL Server für einen Vergleich zwischen CAST() und TRY_CAST() .

Siehe die Microsoft-Dokumentation für CAST() und CONVERT() für detailliertere Informationen (das meiste gilt auch für TRY_CAST() ).