CONCAT_WS (Transact-SQL)
S’applique à : point de terminaison d’analytique SQL Server 2017 (14.x) et ultérieur Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics SQL Analytics dans Microsoft Fabric Warehouse
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. Elle sépare ces valeurs de chaîne concaténées avec le délimiteur spécifié dans le premier argument de la fonction. (CONCAT_WS
indique concaténer avec un séparateur.)
Syntaxe
CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )
Arguments
separator
Une expression de n’importe quel type de caractère (CAR, nchar, nvarchar, or varchar).
argument1, argument2 [ , argumentN ]
Une expression de n’importe quelle valeur de chaîne. La fonction CONCAT_WS
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_WS
accepte un nombre variable d’arguments de chaîne et les concatène (ou les joint) en une seule chaîne. Elle sépare ces valeurs de chaîne concaténées avec le délimiteur spécifié dans le premier argument de la fonction. CONCAT_WS
nécessite un argument de séparateur et un minimum de deux autres arguments de valeur de chaîne ; sinon, CONCAT_WS
génère une erreur. CONCAT_WS
convertit implicitement tous les arguments en types chaîne avant la concaténation.
La conversion implicite en chaînes respecte les règles existantes de conversion de type de données. Pour plus d’informations sur le comportement et les conversions de type de données, consultez CONCAT (Transact-SQL).
Traitement des valeurs NULL
CONCAT_WS
ignore le paramètre SET CONCAT_NULL_YIELDS_NULL { ON | OFF }
.
Si CONCAT_WS
reçoit des arguments dont toutes les valeurs NULL
, elle retourne une chaîne vide de type varchar(1).
CONCAT_WS
ignore les valeurs NULL durant la concaténation et n’ajoute pas le séparateur entre les valeurs NULL. Par conséquent, CONCAT_WS
peut gérer correctement la concaténation des chaînes avec des valeurs « vides », par exemple, un deuxième champ d’adresse. Consultez l’exemple B pour plus d’informations.
Si un scénario implique des valeurs NULL séparées par un délimiteur, considérez la fonction ISNULL. Pour plus d’informations, consultez l’exemple C.
Exemples
R. Concaténez des valeurs avec séparateur
Cet exemple concatène trois colonnes de la table sys.databases
, en séparant les valeurs par un trait d’union entouré d’espaces (-
).
SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;
Voici le jeu de résultats.
DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE
B. Ignorez les valeurs NULL
Cet exemple ignore les valeurs NULL
de la liste des arguments et utilise une valeur de séparateur de virgules (,
).
SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;
Voici le jeu de résultats.
Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052
C. Générez des données au format CSV à partir d’une table
Cet exemple utilise une valeur de séparateur de virgule (,
) et ajoute le caractère de retour chariot CHAR(13)
dans le format de valeurs séparées par des colonnes du jeu de résultats.
SELECT STRING_AGG(CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)) AS DatabaseInfo
FROM sys.databases;
Voici le jeu de résultats.
DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE
CONCAT_WS
ignore les valeurs NULL
dans les colonnes. Agencez une colonne de valeurs NULL avec la fonction ISNULL
et fournissez une valeur par défaut. Par exemple :
SELECT STRING_AGG(
CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''),
ISNULL(containment_desc, 'N/A')
), CHAR(13)) AS DatabaseInfo
FROM sys.databases;