Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonctionnement de TRY_CAST() dans SQL Server

Dans SQL Server, une fonction souvent utilisée est CAST() , qui convertit une expression d'un type de données en un autre. Mais si le cast ne réussit pas, il renvoie une erreur.

Saisissez TRY_CAST() .

Le TRY_CAST() La fonction ne renvoie pas d'erreur si le cast échoue. Au lieu de cela, il renvoie NULL .

Il y a cependant des occasions où il renverra une erreur.

Syntaxe

La syntaxe ressemble à ceci :

TRY_CAST ( expression AS data_type [ ( length ) ] )

expression est l'expression à convertir, data_type est le nouveau type de données, et length est une longueur facultative pour le nouveau type de données.

Exemple 1 – Le casting réussit

Voici un exemple de conversion d'une chaîne en decimal :

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

Résultat :

7.00

Dans ce cas, le casting a réussi.

Exemple 2 – La diffusion échoue et renvoie NULL

Voici un exemple d'échec du cast et NULL en cours de retour :

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

Résultat :

NULL

Le cast a échoué, et donc NULL a été renvoyé.

À titre de comparaison, voici ce qui se passe lorsque nous utilisons CAST() au lieu de TRY_CAST() :

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

Résultat :

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

Exemple 3 – La diffusion échoue et renvoie une erreur

Il y a des occasions où TRY_CAST() renverra une erreur.

Si un cast n'est explicitement pas autorisé, il renvoie une erreur :

SELECT TRY_CAST(10 AS xml);

Résultat :

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

Plus d'informations

Voir comment CAST() Fonctionne dans SQL Server pour plus d'exemples de conversion, et CAST() contre TRY_CAST() dans SQL Server pour une comparaison entre CAST() et TRY_CAST() .

Voir la documentation de Microsoft pour CAST() et CONVERT() pour des informations plus détaillées (la plupart s'appliquent également à TRY_CAST() ).