Sdílet prostřednictvím


CONCAT_WS (Transact-SQL)

Platí na: SQL Server 2017 (14.x) a novější verze Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL analytics endpoint in Microsoft FabricWarehouse in Microsoft FabricSQL database in Microsoft Fabric

Tato funkce vrátí řetězec, který je výsledkem zřetězení nebo spojení dvou nebo více řetězcových hodnot koncovým způsobem. Tyto zřetězené řetězcové hodnoty odděluje oddělovačem zadaným v prvním argumentu funkce. (CONCAT_WS označuje zřetězení s oddělovačem.)

Syntax

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

Argumenty

oddělovač

Výraz libovolného typu znaku (znak, nchar, nvarcharnebo varchar).

argument1, argument2 [ , argumentN ]

Výraz libovolné řetězcové hodnoty. Funkce CONCAT_WS vyžaduje alespoň dva argumenty a maximálně 254 argumentů.

Návratové typy

Řetězcová hodnota, jejíž délka a typ závisí na vstupu.

Poznámky

CONCAT_WS vezme proměnný počet řetězcových argumentů a zřetězí je (nebo spojí) do jednoho řetězce. Tyto zřetězené řetězcové hodnoty odděluje oddělovačem zadaným v prvním argumentu funkce. CONCAT_WS vyžaduje argument oddělovače a minimálně dva další argumenty řetězcové hodnoty; jinak CONCAT_WS vyvolá chybu. CONCAT_WS implicitně převede všechny argumenty na typy řetězců před zřetězením.

Implicitní převod na řetězce se řídí existujícími pravidly pro převody datových typů. Další informace o chování a převodech datových typů najdete v tématu CONCAT (Transact-SQL).

Ošetření hodnot NULL

CONCAT_WS ignoruje nastavení SET CONCAT_NULL_YIELDS_NULL { ON | OFF }.

Pokud CONCAT_WS obdrží argumenty se všemi hodnotami NULL, vrátí prázdný řetězec typu varchar(1).

CONCAT_WS během zřetězení ignoruje hodnoty null a nepřidá oddělovač mezi hodnoty null. Proto CONCAT_WS může vyčistit zřetězení řetězců, které mohou mít "prázdné" hodnoty – například druhé pole adresy. Další informace naleznete v tématu Příklad B.

Pokud scénář zahrnuje hodnoty null oddělené oddělovačem, zvažte funkci ISNULL. Další informace naleznete v tématu Příklad C.

Příklady

A. Zřetězení hodnot s oddělovačem

Tento příklad zřetězí tři sloupce z tabulky sys.databases a odděluje hodnoty spojovníkem obklopeným mezerami (-).

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

Tady je sada výsledků.

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

B. Přeskočit hodnoty NULL

Tento příklad ignoruje NULL hodnoty v seznamu argumentů a používá hodnotu oddělovače čárky (,).

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

Tady je sada výsledků.

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

C. Generování dat formátovaných csv z tabulky

Tento příklad používá hodnotu oddělovače čárky (,) a přidá návratový znak řádku CHAR(13) ve formátu hodnot oddělených čárkami sady výsledků.

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

Tady je sada výsledků.

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

CONCAT_WS ignoruje hodnoty NULL ve sloupcích. Zabalte sloupec s možnou hodnotou null pomocí funkce ISNULL a zadejte výchozí hodnotu. Například:

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