Dela via


CONCAT_WS (Transact-SQL)

gäller för: SQL Server 2017 (14.x) och senare Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Den här funktionen returnerar en sträng som är resultatet av sammanfogningen eller sammanfogningen av två eller flera strängvärden på ett sätt från slutpunkt till slutpunkt. Den separerar de sammanfogade strängvärdena med avgränsaren som anges i det första funktionsargumentet. (CONCAT_WS anger sammanfoga med avgränsaren.)

Syntax

CONCAT_WS ( separator , argument1 , argument2 [ , argumentN ] ... )

Argument

avgränsare

Ett uttryck av valfri teckentyp (tecken, nchar, nvarchareller varchar).

argument1, argument2 [ , argumentN ]

Ett uttryck för valfritt strängvärde. Funktionen CONCAT_WS kräver minst två argument och högst 254 argument.

Returtyper

Ett strängvärde vars längd och typ beror på indata.

Anmärkningar

CONCAT_WS tar ett variabelt antal strängargument och sammanfogar (eller kopplar) dem till en enda sträng. Den separerar de sammanfogade strängvärdena med avgränsaren som anges i det första funktionsargumentet. CONCAT_WS kräver ett avgränsarargument och minst två andra strängvärdeargument. annars uppstår ett fel CONCAT_WS. CONCAT_WS konverterar implicit alla argument till strängtyper före sammanfogning.

Den implicita konverteringen till strängar följer de befintliga reglerna för datatypskonverteringar. Mer information om beteende- och datatypkonverteringar finns i CONCAT (Transact-SQL).

Behandling av NULL-värden

CONCAT_WS ignorerar inställningen SET CONCAT_NULL_YIELDS_NULL { ON | OFF }.

Om CONCAT_WS tar emot argument med alla NULL värden returneras en tom sträng av typen varchar(1).

CONCAT_WS ignorerar null-värden under sammanfogning och lägger inte till avgränsaren mellan null-värden. Därför kan CONCAT_WS hantera sammanfogning av strängar som kan ha "tomma" värden , till exempel ett andra adressfält. Mer information finns i Exempel B.

Om ett scenario omfattar null-värden avgränsade med en avgränsare bör du överväga funktionen ISNULL. Mer information finns i Exempel C.

Exempel

A. Sammanfoga värden med avgränsare

Det här exemplet sammanfogar tre kolumner från den sys.databases tabellen och separerar värdena med ett bindestreck omgivet av blanksteg (-).

SELECT CONCAT_WS(' - ', database_id, recovery_model_desc, containment_desc) AS DatabaseInfo
FROM sys.databases;

Här är resultatuppsättningen.

DatabaseInfo
-----------------
1 - SIMPLE - NONE
2 - SIMPLE - NONE
3 - FULL - NONE
4 - SIMPLE - NONE

B. Hoppa över NULL-värden

Det här exemplet ignorerar NULL värden i argumentlistan och använder ett kommaavgränsarvärde (,).

SELECT CONCAT_WS(',', '1 Microsoft Way', NULL, NULL, 'Redmond', 'WA', 98052) AS Address;

Här är resultatuppsättningen.

Address
--------------------------------
1 Microsoft Way,Redmond,WA,98052

C. Generera CSV-formaterade data från tabellen

Det här exemplet använder ett kommaavgränsarvärde (,) och lägger till vagnreturtecknet CHAR(13) i formatet kommaavgränsade värden i resultatuppsättningen.

SELECT STRING_AGG(
    CONCAT_WS(',', database_id, recovery_model_desc, containment_desc), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;

Här är resultatuppsättningen.

DatabaseInfo
-------------
1,SIMPLE,NONE
2,SIMPLE,NONE
3,FULL,NONE
4,SIMPLE,NONE

CONCAT_WS ignorerar NULL värden i kolumnerna. Omslut en nullbar kolumn med funktionen ISNULL och ange ett standardvärde. Till exempel:

SELECT STRING_AGG(
    CONCAT_WS(',', database_id, ISNULL(recovery_model_desc, ''), ISNULL(containment_desc, 'N/A')), CHAR(13)
) AS DatabaseInfo
FROM sys.databases;