Sdílet prostřednictvím


CONCAT_WS (Transact-SQL)

platí pro: SQL Server 2017 (14.x) a novější Azure SQL DatabaseAzure SQL Managed Instancekoncový bod analýzy SQL Azure Synapse Analyticssql Analytics v Microsoft FabricWarehouse v 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;