108 votes

Comment utiliser la fonction CONCAT dans SQL Server 2008 R2?

J'étais à la recherche d'une fonction CONCAT dans SQL Server 2008 R2. J'ai trouvé le lien pour cette fonction. Mais quand j'utilise cette fonction, j'obtiens l'erreur suivante :

Msg 195, Level 15, State 10, Line 7
'CONCAT' n'est pas un nom de fonction intégrée reconnu.

Est-ce que la fonction CONCAT existe dans SQL Server 2008 R2 ?

Si ce n'est pas le cas, comment puis-je concaténer des chaînes dans SQL Server 2008 R2 ?

0 votes

@Oded J'essaie simplement d'exécuter l'instruction - select concat('b', 'a')

1 votes

@marc_s: La documentation indique bien qu'elle concerne SQL Server 2012, mais il n'y a aucune indication que CONCAT est nouveau pour 2012.

1 votes

Il indique indirectement que c'est pour 2012, mais la page est mal conçue en termes d'interface utilisateur. Sur les pages où une fonctionnalité EST disponible dans les anciennes versions, il y a un menu déroulant directement à côté de la version du document que vous êtes en train de lire. Si vous le savez, alors vous savez que c'est pour 2012 uniquement. Si vous ne le saviez pas, vous vous retrouvez dans la même situation que Mitesh.

105voto

Lynn Langit Points 2311

Juste pour complétude - en SQL 2008, vous utiliseriez l'opérateur plus + pour effectuer une concaténation de chaînes.

Jet un coup d'œil à la référence MSDN avec du code d'exemple. À partir de SQL 2012, vous pouvez utiliser la nouvelle fonction CONCAT.

70voto

ta.speot.is Points 15157

CONCAT est nouveau dans SQL Server 2012. Le lien que vous avez donné indique clairement que ce n'est pas une fonction dans les versions précédentes, y compris 2008 R2.

Le fait qu'il fasse partie de SQL Server 2012 peut être vu dans l'arborescence du document :

SQL Server 2012  
Documentation sur le produit  
Livres en ligne pour SQL Server 2012  
Moteur de base de données  
  Référence Transact-SQL (Moteur de base de données)  
    Fonctions intégrées (Transact-SQL)  
      Fonctions de chaîne (Transact-SQL)  

EDIT Martin Smith signale de manière utile que SQL Server fournit une implémentation de la fonction CONCAT de ODBC.

29 votes

Vous pouvez utiliser SELECT {fn concat ('foo', 'bar')}; dans les versions précédentes. N'accepte cependant que 2 paramètres.

6 votes

Ou simplement utiliser l'opérateur +, comme le mentionne @lynn-langit dans sa réponse, que j'avais totalement manqué au début car je n'avais lu que la réponse acceptée...

7 votes

@Svish + se comporte différemment, les résultats pour SELECT 'A' + 'B' + 'C' vs SELECT CONCAT('A', 'B', 'C') vs SELECT 'A' + 'B' + NULL vs SELECT CONCAT('A', 'B', NULL) sont ABC, ABC, NULL, AB

50voto

vasin1987 Points 440

Je suggère que vous castiez toutes les colonnes avant de les concaténer

cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)

Cela devrait fonctionner pour vous.

6 votes

Il est intéressant de noter que si une taille varchar n'est pas spécifiée (par exemple, varchar(50)), alors SQL utilisera la valeur par défaut de 30. Si la variable / valeur à convertir est supérieure à la valeur par défaut, elle sera tronquée sans générer d'erreur.

0 votes

Je ne sais pas pourquoi mais cela m'a pris un certain temps pour trouver une solution à cela. Merci.

23voto

kuklei Points 91

CONCAT, comme indiqué, n'est pas pris en charge avant SQL Server 2012. Cependant, vous pouvez simplement concaténer en utilisant l'opérateur + comme suggéré. Mais attention, cet opérateur renverra une erreur si le premier opérande est un nombre car il pense qu'il va effectuer une addition et non une concaténation. Pour résoudre ce problème, ajoutez simplement '' devant. Par exemple

someNumber + 'someString' + .... + lastVariableToConcatenate

lèvera une erreur MAIS '' + someNumber + 'someString' + ...... fonctionnera très bien.

De plus, si deux nombres doivent être concaténés, assurez-vous d'ajouter '' entre eux, comme ceci

.... + someNumber + '' + someOtherNumber + .....

0 votes

Merci, utiliser '' + f.columnName + '' dans la liste des colonnes fonctionne parfaitement!

2 votes

@kuklei Sur mon serveur SQL, SELECT 'varchar(' + 5 + ')' lance l'erreur "Échec de la conversion de la valeur nvarchar 'varchar (' en type de données int", donc je suppose que ta réponse n'est pas valable.

-3voto

MarkHone Points 306

J'ai également trouvé cela peu clair. Si je tape sur "F1" depuis SQL Management Studio 2008 R2 sur le mot-clé CONCAT, SQL Server Books Online s'ouvre et me montre l'article suivant sur la fonction :

Capture d'écran de Sql Server Books Online

Cela implique que la fonction est disponible en 2008 R2 mais si je copie et colle l'URL citée, je me retrouve avec un article qui concerne SQL Server 2012 - pas vraiment convivial !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X