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

CAST() vs TRY_CAST() dans SQL Server :Quelle est la différence ?

Lors de la conversion entre les types de données dans SQL Server, vous rencontrerez diverses fonctions qui font apparemment la même chose. Cependant, il existe généralement des différences entre ces fonctions qui peuvent ne pas être apparentes à première vue. Un exemple de ceci est la différence entre le CAST() et TRY_CAST() fonctions.

Cet article montre la différence entre ces fonctions lors de l'utilisation de SQL Server.

La principale différence entre le CAST() et TRY_CAST() fonctions réside dans la façon dont elles gèrent les données qui ne peuvent pas être converties.

La fonction CAST()

Le CAST() La fonction convertit une expression d'un type de données en un autre. Cela vous permet de faire des choses comme concaténer deux valeurs de types de données différents. Comme ceci :

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

Résultat :

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

Cela fonctionne bien lorsque les données peuvent être converties. Mais que se passe-t-il si les données ne peuvent pas être converties ?

Dans ce cas, vous obtiendrez quelque chose comme ceci :

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

Résultat :

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

C'est assez juste - si SQL Server ne peut pas convertir les données, vous devez le savoir !

Cependant, il existe une autre façon de le faire.

La fonction TRY_CAST()

Le TRY_CAST() la fonction fonctionne exactement comme CAST() sauf que si les données ne peuvent pas être converties, elle renvoie null (au lieu de lancer une erreur comme CAST() fait):

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

Résultat :

Result
------
null

Cela peut être pratique si vous souhaitez utiliser la programmation conditionnelle afin que l'application effectue une tâche différente selon que les données peuvent être converties ou non.

Exemple :

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

Résultat :

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

Types de données non valides

Le TRY_CAST() La fonction fonctionne uniquement de cette façon lors de l'utilisation de types de données valides. Vous obtiendrez donc une erreur si vous fournissez explicitement un type de données non autorisé.

Exemple :

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

Résultat :

Error: Type Miami is not a defined system type.