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

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Point de terminaison analytique SQL dans Microsoft FabricEntrepôt dans Microsoft Fabric

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). L’exemple SELECT 'book'+'case'; retourne bookcase.

Conventions de la syntaxe Transact-SQL

Syntaxe

expression + expression  

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 (12.x) et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

expression
Toute Expression valide de tout type de données dans la catégorie caractères et binaire, à l’exception des types de données image, ntext ou text. Les deux expressions doivent être de 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 utiliser CONVERT ou CAST avec une concaténation binaire et dans quel cas il n’est pas nécessaire d’utiliser CONVERT ou CAST.

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 des 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

R. 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 de la personne 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.

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + FirstName) AS Name  
FROM Person.Person  
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 des types de données numeric et date.

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

Voici le jeu de résultats obtenu.

------------------------------------------------  
The order is due on 04/23/2007  
(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.

-- Uses AdventureWorks  
  
SELECT (LastName + ',' + SPACE(1) + SUBSTRING(FirstName, 1, 1) + '.') AS Name, e.JobTitle  
FROM Person.Person AS p  
    JOIN HumanResources.Employee AS e  
    ON p.BusinessEntityID = e.BusinessEntityID  
WHERE e.JobTitle LIKE 'Vice%'  
ORDER BY LastName ASC;  
GO  

Voici le jeu de résultats obtenu.

Name               Title  
-------------      ---------------`  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

(3 row(s) affected)

D. Utilisation de longues chaînes dans la concaténation

L’exemple suivant concatène plusieurs chaînes pour former une seule et même longue chaîne, puis essaie de calculer la longueur de la chaîne finale. La longueur finale du jeu de résultats est 16000, car l’évaluation de l’expression commence à gauche, autrement dit, @x + @z + @y => (@x + @z) + @y. Dans cet exemple, le résultat de (@x + @z)) est tronqué à 8000 octets, puis @y est ajouté au jeu de résultats, ce qui permet d’obtenir une longueur de chaîne finale de 16000. Étant donné que @y est une chaîne de type de valeur élevée, la troncation n’a pas lieu.

DECLARE @x VARCHAR(8000) = REPLICATE('x', 8000)
DECLARE @y VARCHAR(max) = REPLICATE('y', 8000)
DECLARE @z VARCHAR(8000) = REPLICATE('z',8000)
SET @y = @x + @z + @y
-- The result of following select is 16000
SELECT LEN(@y) AS y
GO

Voici le jeu de résultats obtenu.

y        
-------  
16000  
 
(1 row(s) affected)

Exemples : Azure Synapse Analytics et Analytics Platform System (PDW)

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

L’exemple suivant concatène plusieurs chaînes pour constituer une seule longue chaîne permettant d’afficher le nom de famille et la première initiale des vice-présidents issus d’un exemple de base de données. Le nom de famille est suivi d'une virgule ; l'initiale est suivie d'un point.

-- Uses AdventureWorks  
  
SELECT (LastName + ', ' + SUBSTRING(FirstName, 1, 1) + '.') AS Name, Title  
FROM DimEmployee  
WHERE Title LIKE '%Vice Pres%'  
ORDER BY LastName ASC;  

Voici le jeu de résultats obtenu.

Name               Title                                           
-------------      ---------------  
Duffy, T.          Vice President of Engineering  
Hamilton, J.       Vice President of Production  
Welcker, B.        Vice President of Sales  

Voir aussi

+= (Affectation après concaténation de chaînes) (Transact-SQL)
ALTER DATABASE (Transact-SQL)
CAST et CONVERT (Transact-SQL)
Conversion de types de données (Moteur de base de données)
Types de données (Transact-SQL)
Expressions (Transact-SQL)
Fonctions intégrées (Transact-SQL)
Opérateurs (Transact-SQL)
SELECT (Transact-SQL)
Instructions SET (Transact-SQL)