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

Funktionsweise von TRY_CONVERT() in SQL Server

In SQL Server der TRY_CONVERT() Funktion ist der CONVERT() sehr ähnlich Funktion, außer dass TRY_CONVERT() gibt keinen Fehler zurück, wenn die Konvertierung fehlschlägt (CONVERT() tut).

Stattdessen TRY_CONVERT() Funktion gibt NULL zurück wenn die Konvertierung nicht erfolgreich ist.

Es gibt jedoch einige Fälle, in denen TRY_CONVERT() gibt einen Fehler zurück.

Syntax

Die Syntax lautet wie folgt:

TRY_CONVERT ( data_type [ ( length ) ], expression [, style ] )

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.

Der optionale style Argument kann verwendet werden, um anzugeben, wie die Funktion den expression übersetzen soll Streit. Sie könnten dieses Argument beispielsweise verwenden, um das Datumsformat anzugeben.

Beispiel 1 – Konvertierung erfolgreich

Hier ist ein Beispiel für die Umwandlung einer Zeichenfolge in eine Dezimalzahl:

SELECT TRY_CONVERT(DECIMAL(5,2), '007');

Ergebnis:

7.00

In diesem Fall war die Konvertierung erfolgreich.

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

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

SELECT TRY_CONVERT(DECIMAL(5,2), 'Three');

Ergebnis:

NULL

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

Zum Vergleich, hier ist, was passiert, wenn wir CONVERT() verwenden statt TRY_CONVERT() :

SELECT CONVERT(DECIMAL(5,2), 'Three');

Ergebnis:

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

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

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

Wenn eine Konvertierung ausdrücklich nicht erlaubt ist, wird ein Fehler zurückgegeben:

SELECT TRY_CONVERT(xml, 10);

Ergebnis:

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

Beispiel 4 – Der style Argument

Wir können den optionalen style verwenden Argument, um anzugeben, wie der Ausdruck übersetzt werden soll.

Beispiel:

SET LANGUAGE British;
SELECT 
    TRY_CONVERT(date, '09/02/2030') AS "British",
    TRY_CONVERT(date, '09/02/2030', 101) AS "US",
    TRY_CONVERT(date, '09/02/30', 1) AS "US (short)",
    TRY_CONVERT(date, '20300902', 112) AS "ISO",
    TRY_CONVERT(date, '09.02.2030', 104) AS "German";

Ergebnis:

Changed language setting to British.
+------------+------------+--------------+------------+------------+
| British    | US         | US (short)   | ISO        | German     |
|------------+------------+--------------+------------+------------|
| 2030-02-09 | 2030-09-02 | 2030-09-02   | 2030-09-02 | 2030-02-09 |
+------------+------------+--------------+------------+------------+

Hier stelle ich meine Sprache auf British ein , dann TRY_CONVERT() ausgeführt mehrmals, jeweils mit einem anderen style Argument (mit Ausnahme des ersten, das die Standardsprache meiner Sitzung verwendet – Britisch).

Wir können sehen, dass das Stilargument beeinflusst, wie der Ausdruck übersetzt wird.

Weitere Informationen

Siehe CONVERT() in SQL Server für weitere Konvertierungsbeispiele und CONVERT() vs TRY_CONVERT() in SQL Server für einen Vergleich zwischen CONVERT() und TRY_CONVERT() .

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