Comment utiliser la fonction CONCAT dans SQL Server 2008 R2?
Je cherchais une fonction CONCAT
dans SQL Server 2008 R2. J' trouvé le lien pour cette fonction. Mais quand j'utilise cette fonction, il donne l'erreur suivante:
Msg 195, Niveau 15, État 10, Ligne 7
'CONCAT' n'est pas un nom de fonction intégré reconnu.
La fonction CONCAT
Existe-t-elle dans SQL Server 2008 R2?
Sinon, comment concaténer des chaînes dans SQL Server 2008 R2?
6 réponses
CONCAT
est nouveau pour SQL Server 2012. Le lien que vous avez donné le rend clair, ce n'est pas une fonction sur Versions précédentes , y compris 2008 R2.
Qu'il fait partie de SQL Server 2012 peut être vu dans l'arborescence du document:
SQL Server 2012
Product Documentation
Books Online for SQL Server 2012
Database Engine
Transact-SQL Reference (Database Engine)
Built-in Functions (Transact-SQL)
String Functions (Transact-SQL)
EDIT Martin Smith souligne utilement que SQL Server fournit une implémentation de la fonction CONCAT
D'ODBC.
Juste pour l'exhaustivité-dans SQL 2008, vous utiliseriez l'opérateur plus +
pour effectuer la concaténation de chaîne.
Jetez un oeil à la référence MSDN avec un exemple de code. À partir de SQL 2012, vous pouvez utiliser la nouvelle fonction CONCAT .
Je vous suggère de lancer toutes les colonnes avant de les concater
cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)
Cela devrait fonctionner pour vous.
CONCAT, comme indiqué, n'est pas pris en charge avant SQL Server 2012. Cependant, vous pouvez concaténer simplement en utilisant l'opérateur + comme suggéré. Mais attention, cet opérateur lancera une erreur si le premier opérande est un nombre car il pense qu'il ajoutera et non concaténera. Pour résoudre ce problème il suffit d'ajouter " en avant. Par exemple
someNumber + 'someString' + .... + lastVariableToConcatenate
Déclenchera une erreur mais '' + someNumber + 'someString' + ......
fonctionnera très bien.
Aussi, s'il y a deux nombres à concaténer, assurez-vous d'ajouter un " entre eux, comme ça
.... + someNumber + '' + someOtherNumber + .....
NULL safe drop dans les approximations de remplacement pour SQL Server 2012 CONCAT function
serveur SQL 2012:
SELECT CONCAT(data1, data2)
pré SQL 2012 (deux Solutions):
SELECT {fn CONCAT(ISNULL(data1, ''), ISNULL(data2, ''))}
SELECT ISNULL(CAST(data1 AS varchar(MAX)), '') + ISNULL(CAST(data2 AS varchar(MAX)), '')
Ces deux solutions rassemblent plusieurs excellentes réponses et mises en garde soulevées par d'autres affiches, y compris @Martin Smith, @Svish et @vasin1987.
Ces options ajoutent NULL
à ''
(chaîne vide) pour une manipulation sûre de NULL
tout en tenant compte du comportement variable de l'opérateur +
relatif à des opérandes spécifiques.
Notez que la solution ODBC Scaler Function est limitée à 2 arguments alors que +
l'approche de l'opérateur est évolutive pour de nombreux arguments au besoin.
Notez également le problème potentiel identifié par @ Swifty concernant la taille par défaut varchar
ici corrigé par varchar(MAX)
.
(city + ', ' + state + ' ' + zip) as ctstzip for select
(city + ', ' + state + ' ' + zip) for insert
Ne convertit ou ne convertit que si un type de champ est différent des autres.
Lors de l'insertion, la valeur doit être au bon endroit, vous devez l'insérer. L'utilisation de " as " vous donnera une erreur.
C'est-à-dire
Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + zip))