Delen via


CONCAT_WS (Transact-SQL)

van toepassing op: SQL Server 2017 (14.x) en hoger Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Deze functie retourneert een tekenreeks die het resultaat is van de samenvoeging of het samenvoegen van twee of meer tekenreekswaarden op een end-to-end-manier. Deze samengevoegde tekenreekswaarden worden gescheiden door het scheidingsteken dat is opgegeven in het eerste functieargument. (CONCAT_WS geeft aan samenvoegen met scheidingsteken.)

Syntaxis

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

Argumenten

scheidingsteken

Een expressie van elk tekentype (teken, nchar, nvarcharof varchar).

argument1, argument2 [ argumentN ]

Een expressie van een tekenreekswaarde. De functie CONCAT_WS vereist ten minste twee argumenten en niet meer dan 254 argumenten.

Retourtypen

Een tekenreekswaarde waarvan de lengte en het type afhankelijk zijn van de invoer.

Opmerkingen

CONCAT_WS neemt een variabel aantal tekenreeksargumenten en voegt deze samen (of voegt ze samen) in één tekenreeks. Deze samengevoegde tekenreekswaarden worden gescheiden door het scheidingsteken dat is opgegeven in het eerste functieargument. CONCAT_WS vereist een scheidingsteken en minimaal twee andere argumenten voor tekenreekswaarden; anders genereert CONCAT_WS een fout. CONCAT_WS converteert impliciet alle argumenten naar tekenreekstypen voordat deze worden samengevoegd.

De impliciete conversie naar tekenreeksen volgt de bestaande regels voor conversies van gegevenstypen. Zie CONCAT (Transact-SQL)voor meer informatie over gedrag en conversie van gegevenstypen.

Behandeling van NULL-waarden

CONCAT_WS negeert de instelling voor SET CONCAT_NULL_YIELDS_NULL { ON | OFF }.

Als CONCAT_WS argumenten ontvangt met alle NULL waarden, wordt een lege tekenreeks van het type varchar(1)geretourneerd.

CONCAT_WS negeert null-waarden tijdens het samenvoegen en voegt het scheidingsteken tussen null-waarden niet toe. Daarom kan CONCAT_WS de samenvoeging van tekenreeksen die mogelijk 'lege' waarden bevatten, bijvoorbeeld een tweede adresveld, afhandelen. Zie voorbeeld Bvoor meer informatie.

Als een scenario null-waarden omvat, gescheiden door een scheidingsteken, kunt u de functie ISNULL overwegen. Zie Voorbeeld Cvoor meer informatie.

Voorbeelden

Een. Waarden samenvoegen met scheidingsteken

In dit voorbeeld worden drie kolommen uit de sys.databases tabel samengevoegd, waarbij de waarden worden gescheiden door een afbreekstreepje tussen spaties (-).

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

Dit is de resultatenset.

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

B. NULL-waarden overslaan

In dit voorbeeld worden NULL waarden in de argumentenlijst genegeerd en wordt een kommascheidingstekenwaarde (,) gebruikt.

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

Dit is de resultatenset.

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

C. Csv-opgemaakte gegevens genereren uit een tabel

In dit voorbeeld wordt een kommascheidingsteken (,) gebruikt en wordt het regelterugloopteken CHAR(13) toegevoegd in de door komma's gescheiden waardenindeling van de resultatenset.

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

Dit is de resultatenset.

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

CONCAT_WS worden NULL waarden in de kolommen genegeerd. Wrap a nullable column with the ISNULL function, and provide a default value. Bijvoorbeeld:

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