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

CAST() vs. TRY_CAST() in SQL Server:Was ist der Unterschied?

Beim Konvertieren zwischen Datentypen in SQL Server werden Sie auf verschiedene Funktionen stoßen, die scheinbar dasselbe tun. Allerdings gibt es zwischen diesen Funktionen meist Unterschiede, die auf den ersten Blick nicht erkennbar sind. Ein Beispiel dafür ist der Unterschied zwischen CAST() und TRY_CAST() Funktionen.

Dieser Artikel demonstriert den Unterschied zwischen diesen Funktionen bei der Verwendung von SQL Server.

Der Hauptunterschied zwischen CAST() und TRY_CAST() Funktionen liegt in der Art und Weise, wie sie mit Daten umgehen, die nicht konvertiert werden können.

Die CAST()-Funktion

Der CAST() Funktion konvertiert einen Ausdruck eines Datentyps in einen anderen. Dadurch können Sie beispielsweise zwei Werte unterschiedlicher Datentypen verketten. So:

SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;

Ergebnis:

Result     
-----------
Comments: 9

Dies funktioniert gut, wenn die Daten konvertiert werden können. Was aber, wenn die Daten nicht konvertiert werden können?

In diesem Fall erhalten Sie etwa Folgendes:

SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;

Ergebnis:

Error: Arithmetic overflow error converting numeric to data type varchar.

Das ist fair genug – wenn SQL Server die Daten nicht konvertieren kann, müssen Sie es wissen!

Es gibt jedoch einen anderen Weg, dies zu tun.

Die TRY_CAST()-Funktion

Der TRY_CAST() Funktion funktioniert genauso wie CAST() außer dass, wenn die Daten nicht konvertiert werden können, null zurückgegeben wird (anstatt einen Fehler wie CAST() auszulösen tut):

SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;

Ergebnis:

Result
------
null

Dies kann praktisch sein, wenn Sie bedingte Programmierung verwenden möchten, damit die Anwendung eine andere Aufgabe ausführt, je nachdem, ob die Daten konvertiert werden können oder nicht.

Beispiel:

SELECT   
    CASE WHEN TRY_CAST(10.00 AS varchar(2)) IS NULL   
    THEN 'Cast failed'  
    ELSE 'Cast succeeded'  
END AS Result;

Ergebnis:

Result     
-----------
Cast failed

Ungültige Datentypen

Der TRY_CAST() Die Funktion funktioniert nur auf diese Weise, wenn gültige Datentypen verwendet werden. Sie erhalten also eine Fehlermeldung, wenn Sie explizit einen nicht zulässigen Datentyp angeben.

Beispiel:

SELECT 'Comments: ' + TRY_CAST(10.00 AS Miami) AS Result;

Ergebnis:

Error: Type Miami is not a defined system type.