CONCAT_WS (Transact-SQL)
platí pro: SQL Server 2017 (14.x) a novější
Azure SQL Database
Azure SQL Managed Instance
koncový bod analýzy SQL Azure Synapse Analytics
sql Analytics v Microsoft Fabric
Warehouse 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;
Související obsah
- CONCAT (Transact-SQL)
- FORMATMESSAGE (Transact-SQL)
- QUOTENAME (Transact-SQL)
- NAHRADIT (Transact-SQL)
- REVERSE (Transact-SQL)
- STRING_AGG (Transact-SQL)
- STRING_ESCAPE (Transact-SQL)
- STUFF (Transact-SQL)
- TRANSLATE (Transact-SQL)
- řetězcové funkce (Transact-SQL)