Si vous avez déjà essayé de concaténer une chaîne avec un nombre lors de l'utilisation de SQL Server, mais que vous avez reçu une erreur, cet article devrait clarifier les choses pour vous. Il existe plusieurs façons d'effectuer la concaténation à l'aide de T-SQL dans SQL Server, et si vous concaténez différents types de données (comme une chaîne et un nombre), vous pouvez recevoir une erreur, selon la façon dont vous effectuez la concaténation.
La chose à retenir lors de la concaténation de différents types de données est qu'ils doivent d'abord être convertis dans le même type de données. Plus précisément, lors de la concaténation d'une chaîne avec un nombre, le nombre devra être converti en chaîne avant de pouvoir être concaténé avec la chaîne. Heureusement, SQL Server/T-SQL rend cela facile.
Cet article présente six façons de concaténer des chaînes avec des nombres à l'aide de T-SQL.
La fonction CONCAT()
La façon la plus évidente (et peut-être la meilleure) de concaténer une chaîne et un nombre est d'utiliser le CONCAT()
une fonction. Cela vous permet de fournir la chaîne et le nombre sous la forme de deux arguments distincts. SQL Server les concaténera alors, et votre concaténation est terminée.
Exemple
SELECT CONCAT('Comments: ', 9) AS Result;
Résultat :
Result ----------- Comments: 9
Comme vous pouvez le voir, cela fonctionne parfaitement. La chaîne et le nombre sont présentés comme un seul champ.
Notez que vous n'êtes pas limité à une seule chaîne et un seul nombre - le CONCAT()
La fonction peut accepter jusqu'à 254 arguments (c'est-à-dire que vous pouvez joindre jusqu'à 254 chaînes/nombres ensemble.
Notez également que CONCAT()
convertit implicitement tous les arguments en types de chaîne avant la concaténation. En outre, CONCAT()
convertit implicitement toutes les valeurs nulles en chaînes vides.
La fonction CONCAT_WS()
Nous pouvons pousser l'exemple précédent un peu plus loin en utilisant le CONCAT_WS()
une fonction. Cette fonction vous permet de spécifier un séparateur.
Pour fournir un séparateur, ajoutez-le simplement comme premier argument. Spécifiez ensuite la chaîne et le nombre comme deuxième et troisième arguments.
SELECT CONCAT_WS(': ', 'Comments', 9) AS Result;
Résultat :
Result ----------- Comments: 9
Notez que cette fonction n'est pas nécessairement adaptée pour séparer les paires nom/valeur, car le séparateur est ajouté entre chaque élément individuel qui est concaténé (il sera donc également ajouté entre chaque paire dans le cas où vous avez plusieurs paires). Dans notre cas, cela fonctionne bien, car nous n'avons qu'une seule paire nom/valeur à concaténer.
Cependant, vous pouvez toujours imbriquer plusieurs CONCAT_WS()
pour renvoyer la concaténation correcte selon vos besoins (afin que vous puissiez avoir un séparateur différent entre chaque paire).
La fonction CONVERT()
Si pour une raison quelconque vous ne pouvez pas (ou ne voulez pas) utiliser le CONCAT()
ou CONCAT_WS()
fonctions, vous pouvez effectuer une concaténation à l'aide de l'opérateur de concaténation de chaînes (+
). Lorsque vous utilisez cette méthode, vous devrez effectuer manuellement toutes les conversions de type de données.
Une façon de convertir entre les types de données consiste à utiliser le CONVERT()
fonction.
Voici comment procéder en utilisant les mêmes données que dans les exemples précédents :
SELECT 'Comments: ' + CONVERT(varchar(12), 9) AS Result;
Résultat :
Result ----------- Comments: 9
Dans ce cas, je convertis l'entier en varchar(12), mais cela peut être n'importe quel type de données et longueur dont vous avez besoin.
La fonction CAST()
Le CAST()
La fonction est très similaire à la fonction CONVERT()
une fonction. La principale différence est que CAST()
est la norme ANSI et CONVERT()
est spécifique à T-SQL. Cela dit, CONVERT()
a quelques fonctionnalités supplémentaires, mais pour les besoins de ces exemples, vous pouvez utiliser l'un ou l'autre.
Voici le CAST()
version utilisant les mêmes données que dans les exemples précédents :
SELECT 'Comments: ' + CAST(9 AS varchar(12)) AS Result;
Résultat :
Result ----------- Comments: 9
La fonction TRY_CONVERT()
Un problème potentiel lors de l'utilisation de CONVERT()
fonction est que, si la conversion ne réussit pas, vous obtiendrez une erreur. Bien que cela convienne dans de nombreux cas, dans certains cas, cela peut ne pas être souhaitable. Dans de tels cas, vous pourriez trouver TRY_CONVERT()
plus adapté.
Le TRY_CONVERT()
la fonction convertit le type de données tout comme CONVERT()
la fonction le fait. Cependant, si les données ne peuvent pas être converties, elles renverront null
.
Par exemple, si nous essayons de faire ce qui suit, nous obtenons une erreur :
SELECT 'Comments: ' + CONVERT(varchar(1), 10.00) AS Result;
Résultat :
Error: Arithmetic overflow error converting numeric to data type varchar.
Cependant, si nous utilisons TRY_CONVERT()
, nous obtenons null
:
SELECT 'Comments: ' + TRY_CONVERT(varchar(1), 10.00) AS Result;
Résultat :
Result ------ null
Vous pouvez utiliser la programmation conditionnelle dans ce cas pour effectuer une tâche différente en fonction du résultat.
La fonction TRY_CAST()
Le TRY_CAST()
fonction fonctionne de la même manière. Il convertit le type de données tout comme le CAST()
la fonction le fait et, si les données ne peuvent pas être converties, elle renverra null
.
Par exemple, cela génère une erreur :
SELECT 'Comments: ' + CAST(10.00 AS varchar(1)) AS Result;
Résultat :
Error: Arithmetic overflow error converting numeric to data type varchar.
Mais si nous utilisons TRY_CAST()
à la place, nous obtenons null
:
SELECT 'Comments: ' + TRY_CAST(10.00 AS varchar(1)) AS Result;
Résultat :
Result ------ null