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

Opérateur dans une expression de chaîne qui concaténe des chaînes binaires ou des chaînes de deux caractères ou plus, 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 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 image, ntext, ou text 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 tout caractère compris entre ces chaînes, 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 ce n'est pas nécessaire.

    DECLARE @mybin1 varbinary(5), @mybin2 varbinary(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))
    

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).

Notes

L'opérateur + (Concaténation de chaîne) se comporte différemment selon qu'il est utilisé avec une chaîne vide et de longueur nulle ou avec des valeurs NULL. 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 est fonction 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. Vous pouvez toutefois 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 de type valeur élevée, le résultat n'est pas tronqué.

Exemples

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

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. L'ensemble 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)