CONCAT (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

Cette fonction retourne une chaîne qui résulte de la concaténation ou de la jointure de deux valeurs de chaîne ou plus, de bout en bout.

Remarque

Pour ajouter une valeur de séparation durant la concaténation, consultez CONCAT_WS.

Conventions de la syntaxe Transact-SQL

Syntaxe

CONCAT ( argument1 , argument2 [ , argumentN ] ... )

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

argument1, argument2 [ , argumentN ]

Une expression de n’importe quelle valeur de chaîne. La fonction CONCAT nécessite au moins deux arguments et pas plus de 254 arguments.

Types de retour

Valeur de chaîne dont la longueur et le type dépendent de l’entrée.

Notes

CONCAT accepte un nombre variable d’arguments de chaîne et les concatène (ou les joint) en une seule chaîne. Elle nécessite un minimum de deux valeurs d’entrée ; sinon, CONCAT génère une erreur. CONCAT convertit implicitement tous les arguments en types chaîne avant la concaténation. CONCAT Convertit implicitement les valeurs null en chaînes vides. Si CONCAT reçoit des arguments dont toutes les valeurs NULL, elle retourne une chaîne vide de type varchar(1). La conversion implicite en chaînes respecte les règles existantes de conversion de type de données. Pour plus d’informations sur les conversions de type de données, consultez CAST et CONVERT (Transact-SQL).

Le type de retour dépend du type des arguments. Ce tableau illustre le mappage :

Type d’entrée Type de sortie et longueur
1. Tout argument d’un type de système SQL-CLR, un UDT SQL-CLR ou nvarchar(max) nvarchar(max)
2. Sinon, si un argument est de type varbinary(max) ou varchar(max) varchar(max) , à moins qu’un des paramètres soit de type nvarchar d’une longueur quelconque. Dans ce cas, CONCAT retourne un résultat de type nvarchar(max).
3. Sinon, n’importe quel argument de type nvarchar d’un maximum de 4 000 caractères (nvarchar(<= 4000)) nvarchar(<= 4000)
4. Dans tous les autres cas tout argument de type varchar allant jusqu’à 8 000 caractères (varchar(<= 8000)), sauf si l’un des paramètres est un nvarchar de n’importe quelle longueur. Dans ce cas, CONCAT retourne un résultat de type nvarchar(max).

Quand CONCAT reçoit des arguments d’entrée nvarchar d’une longueur <= 4000 caractères ou des arguments d’entrée varchar d’une longueur <= 8000 caractères, les conversions implicites peuvent affecter la longueur du résultat. Les autres types de données ont des longueurs différentes quand ils sont convertis implicitement en chaînes. Par exemple, une int avec une valeur 14 a une longueur de chaîne de 2, alors qu’une flotte avec la valeur 1234.56789 a une longueur de chaîne de 7 (1234.57). Par conséquent, une concaténation de deux valeurs retourne un résultat d’une longueur pas moins de 9 caractères.

Si aucun des arguments d’entrée n’a un type de Large objet (LOB) pris en charge, le type de retour tronque 8 000 caractères en longueur, quel que soit le type de retour. Cette troncation préserve les espaces et prend en charge l’efficacité de la génération du plan.

CONCAT peut être exécuté à distance sur un serveur lié exécutant SQL Server 2012 (11.x) et versions ultérieures. Pour les serveurs liés plus anciens, l’opération CONCAT est exécutée localement quand le serveur lié a retourné les valeurs non concaténées.

Exemples

R. Utilisez CONCAT

SELECT CONCAT ('Happy ', 'Birthday ', 11, '/', '25') AS Result;

Voici le jeu de résultats obtenu.

Result
--------------------
Happy Birthday 11/25

B. Utilisation de CONCAT avec des valeurs NULL

CREATE TABLE #temp (
    emp_name NVARCHAR(200) NOT NULL,
    emp_middlename NVARCHAR(200) NULL,
    emp_lastname NVARCHAR(200) NOT NULL
    );

INSERT INTO #temp
VALUES ('Name', NULL, 'Lastname');

SELECT CONCAT (emp_name, emp_middlename, emp_lastname) AS Result
FROM #temp;

Voici le jeu de résultats obtenu.

Result
------------
NameLastname