+ (Concaténation de chaîne) (Transact-SQL)

Opérateur dans une expression en chaîne, concaténant deux caractères ou plus, ou des chaînes binaires, des colonnes ou une combinaison de chaînes et de noms de colonnes, pour former une seule expression (un opérateur chaîne).

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

expression + expression

Arguments

expression

expression valide de tout type dans la catégorie de type caractère et binaire, à l'exception des types datetime ou image. Les deux expressions doivent être du même type de données, ou l'une des expressions doit pouvoir être implicitement convertie dans le type de données de l'autre expression.

Pour concaténer des chaînes binaires et tous caractères entre ces chaînes binaires, il faut utiliser une conversion explicite en données de type caractère. L'exemple suivant illustre dans quel cas il faut utiliser CONVERT ou CAST pour une concaténation binaire, et dans quel cas CONVERT ou CAST n'est pas indispensable.

DECLARE @mybin1 binary(5), @mybin2 binary(5)
SET @mybin1 = 0xFF
SET @mybin2 = 0xA5
-- No CONVERT or CAST function is required because this example 
-- concatenates two binary strings.
SELECT @mybin1 + @mybin2
-- A CONVERT or CAST function is required because this example
-- concatenates two binary strings plus a space.
SELECT CONVERT(varchar(5), @mybin1) + ' ' 
   + CONVERT(varchar(5), @mybin2)
-- Here is the same conversion using CAST.
SELECT CAST(@mybin1 AS varchar(5)) + ' ' 
   + CAST(@mybin2 AS varchar(5))

Notes

L'opérateur + (Concaténation de chaîne) se comporte différemment, d'une part avec une chaîne vide et de longueur nulle et d'autre part avec une valeur NULL ou inconnue. Une chaîne de caractères de longueur nulle peut être spécifiée par deux guillemets simples sans caractères à l'intérieur. Une chaîne binaire de longueur nulle peut être spécifiée par 0x sans aucune valeur d'octet dans la constante hexadécimale. La concaténation d'une chaîne de longueur nulle concatène toujours deux chaînes spécifiées. Lorsque vous opérez avec des chaînes dont la valeur est NULL, le résultat de la concaténation dépend des paramètres de la session. De même que pour les opérations arithmétiques réalisées sur des valeurs NULL, l'ajout d'une valeur NULL à une valeur connue se solde généralement par une valeur inconnue. Une concaténation de chaînes effectuée avec une valeur NULL doit produire un résultat du même type. Cependant, vous pouvez modifier ce comportement en changeant le paramètre de CONCAT_NULL_YIELDS_NULL pour la session actuelle. Pour plus d'informations, consultez SET CONCAT_NULL_YIELDS_NULL (Transact-SQL).

Si le résultat de la concaténation de chaînes dépasse la limite des 8 000 octets, il sera tronqué. Néanmoins, si au moins une des chaînes concaténées est d'une valeur élevée, le résultat n'est pas tronqué.

Types de résultats

Retourne le type de données de l'argument dont la priorité est la plus élevée. Pour plus d'informations, consultez Priorités des types de données (Transact-SQL).

Exemple

A. Utilisation de la concaténation de chaînes

L'exemple suivant crée une seule colonne sous l'en-tête Name à partir de plusieurs colonnes de caractères, avec le nom de famille du contact suivi d'une virgule, d'un espace puis de son prénom. Le jeu de résultats est classé par ordre alphabétique croissant sur le nom de famille puis sur le prénom.

USE AdventureWorks;
GO
SELECT (LastName + ', ' + FirstName) AS Name
FROM Person.Contact
ORDER BY LastName ASC, FirstName ASC;

B. Combinaison des types de données numérique et date

L'exemple suivant utilise la fonction CONVERT pour concaténer les types de données numeric et date.

USE AdventureWorks;
GO
SELECT 'The order is due on ' + CONVERT(varchar(12), DueDate, 101)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID = 50001;
GO

Voici l'ensemble des résultats. 

------------------------------------------------ 
The order is due on 04/23/2003            

(1 row(s) affected)

C. Utilisation de la concaténation de plusieurs chaînes

L'exemple suivant concatène plusieurs chaînes pour constituer une chaîne longue et afficher le nom de famille et l'initiale des vice-présidents Adventure Works Cycles. Le nom de famille est suivi d'une virgule ; l'initiale est suivie d'un point.

USE AdventureWorks;
GO
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.Title
FROM Person.Contact AS c
    JOIN HumanResources.Employee AS e
    ON c.ContactID = e.ContactID
WHERE e.Title LIKE 'Vice%'
ORDER BY LastName ASC;
GO

Voici l'ensemble des résultats. 

Name               Title                                         
-------------      ---------------
Duffy, T.         Vice President of Engineering
Hamilton, J.      Vice President of Production
Welcker, B.       Vice President of Sales
(3 row(s) affected)

Voir aussi

Référence

ALTER DATABASE (Transact-SQL)
CAST et CONVERT (Transact-SQL)
Types de données (Transact-SQL)
Expressions (Transact-SQL)
Fonctions (Transact-SQL)
Opérateurs (Transact-SQL)
SELECT (Transact-SQL)
SET (Transact-SQL)

Autres ressources

Conversion de types de données (moteur de base de données)
Définition des options de base de données

Aide et Informations

Assistance sur SQL Server 2005