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

CONVERT() vs. TRY_CONVERT in SQL Server:Was ist der Unterschied?

Sie haben vielleicht bemerkt, dass T-SQL sowohl ein CONVERT() enthält Funktion und ein TRY_CONVERT() Funktion, die Sie in SQL Server verwenden können, um Konvertierungen zwischen Datentypen durchzuführen. Aber wenn Sie sich den Kopf darüber zerbrechen, was der Unterschied zwischen diesen beiden Funktionen ist, lesen Sie weiter!

Der Unterschied zwischen CONVERT() und TRY_CONVERT() liegt in der Art und Weise, wie sie mit Datentypen umgehen, die nicht konvertiert werden können. Einer wirft einen Fehler, während der andere null zurückgibt. Die folgenden Beispiele demonstrieren dies.

Die CONVERT()-Funktion

Schauen wir uns zuerst an, was CONVERT() ist Funktion tut. Es konvertiert einen Datentyp in einen anderen. Hier ist ein Beispiel:

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

Ergebnis:

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

In diesem Beispiel konvertieren wir einen int Wert zu varchar(12) . Und weil der Wert in unseren gewünschten Datentyp und Länge konvertiert werden konnte, hat das perfekt funktioniert.

Dies funktioniert zwar perfekt, wenn die Konvertierung erfolgreich ist, aber was passiert, wenn sie fehlschlägt?

Wenn die Konvertierung fehlschlägt → Fehler

Lassen Sie uns den Code ein wenig anpassen und sehen, was passiert, wenn die Konvertierung fehlschlägt:

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

Ergebnis:

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

Wir erhalten eine Fehlermeldung.

Die TRY_CONVERT()-Funktion

Der TRY_CONVERT() ist eine Alternative, mit der wir die Fehlermeldung verhindern können. Diese Funktion führt dieselbe Datenkonvertierungsoperation durch wie CONVERT() , wenn diese Funktion die Konvertierung jedoch nicht durchführen kann, gibt sie null zurück :

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

Ergebnis:

Result
------
null

Sie können dieses Ergebnis nehmen und Bedingungscode anwenden, sodass je nachdem, ob die Konvertierung erfolgreich ist oder nicht, etwas anderes passiert.

Beispiel:

SELECT   
    CASE WHEN TRY_CONVERT(varchar(1), 10.00) IS NULL   
    THEN 'Conversion failed'  
    ELSE 'Conversion succeeded'  
END AS Result;

Ergebnis:

Result           
-----------------
Conversion failed

Ungültige Datentypen

Ein Vorbehalt mit TRY_CONVERT() ist, dass es nur so funktioniert, wenn gültige Datentypen verwendet werden. Sie erhalten also eine Fehlermeldung, wenn Sie explizit einen nicht zulässigen Datentyp angeben.

Beispiel:

SELECT 'Comments: ' + TRY_CONVERT(Homer, 10.00) AS Result;

Ergebnis:

Error: Type Homer is not a defined system type.