Je recherchais une fonction CONCAT
dans SQL Server 2008 R2. I trouvé le lien pour cette fonction . Mais quand j'utilise cette fonction, cela donne l'erreur suivante:
Msg 195, niveau 15, état 10, ligne 7
'CONCAT' n'est pas un nom de fonction intégrée reconnu.
La fonction CONCAT
existe-t-elle dans SQL Server 2008 R2?
Sinon, comment concaténer des chaînes dans SQL Server 2008 R2?
CONCAT
est une nouveauté de SQL Server 2012. Le lien que vous avez donné le précise, ce n'est pas une fonction de versions précédentes , y compris 2008 R2.
Vous pouvez voir qu'il fait partie de SQL Server 2012 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 fait remarquer avec gentillesse que SQL Server fournit une implémentation de la fonction ODBC CONCAT
.
Juste pour être complet - dans SQL 2008, vous utiliseriez l’opérateur plus +
pour effectuer la concaténation de chaînes.
Examinez le référence MSDN avec un exemple de code. À partir de SQL 2012, vous souhaiterez peut-être utiliser le nouveau fonction CONCAT .
Je vous suggère de jeter toutes les colonnes avant de les concatater
cast('data1' as varchar) + cast('data2' as varchar) + cast('data3' as varchar)
Cela devrait fonctionner pour vous.
Comme indiqué, CONCAT n'est pas pris en charge avant SQL Server 2012. Toutefois, vous pouvez concaténer simplement à l'aide de l'opérateur +, comme suggéré. Mais attention, cet opérateur émettra une erreur si le premier opérande est un nombre puisqu'il pense ajouter et non concaténer. Pour résoudre ce problème, ajoutez simplement '' devant. Par exemple
someNumber + 'someString' + .... + lastVariableToConcatenate
générera une erreur MAIS '' + someNumber + 'someString' + ......
fonctionnera parfaitement.
De plus, s’il ya deux nombres à concaténer, assurez-vous d’ajouter un '' entre eux, comme suit
.... + someNumber + '' + someOtherNumber + .....
NULL Chute sûre des approximations de remplacement pour la fonction CONCAT de SQL Server 2012
SQL Server 2012 :
SELECT CONCAT(data1, data2)
PRE 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, notamment @Martin Smith, @Svish et @ vasin1987.
Ces options ajoutent NULL
à ''
(chaîne vide) pour la conversion sécurisée 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 +
operator est extensible à plusieurs arguments. comme requis.
Notez également le problème potentiel identifié par @Swifty concernant la taille par défaut de varchar
, résolu ici par varchar(MAX)
.
(city + ', ' + state + ' ' + Zip) as ctstzip for select
(city + ', ' + state + ' ' + Zip) for insert
Convertissez ou convertissez uniquement si un type de champ est différent des autres.
Lorsque vous insérez la valeur doit être au bon endroit, vous devez l'insérer. L'utilisation de "comme" vous donnera une erreur.
c'est à dire.
Insert into testtable (ctstzip) Values ((city + ', ' + state + ' ' + Zip))