Pokud v SQL Server a Azure potřebujete zřetězit dva nebo více řetězců, můžete použít T-SQL CONCAT() funkce. Stejně jako u každé základní operace zřetězení tato funkce spojuje řetězce dohromady, od konce ke konci.
Ale co když potřebujete přidat oddělovač mezi každý řetězec?
Můžete například chtít vytvořit seznam řetězců oddělených čárkami. V tomto případě byste chtěli mezi každý řetězec vložit čárku. Takhle:
Paris, France
Místo toho:
ParisFrance
Naštěstí T-SQL poskytuje CONCAT_WS() funkce, která vám pomůže přesně to udělat. CONCAT_WS() funkce funguje stejně jako CONCAT() funkce, kromě toho, že vyžaduje další argument – oddělovač, který byste chtěli použít.
Zde je příklad:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Výsledek:
Location ------------ Paris,France
A můžete tam přidat mezeru, pokud chcete:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Výsledek:
Location ------------- Paris, France
Oddělovač
Nic neříká, že oddělovač musí být čárka. Oddělovač může být výraz libovolného typu znaků (char , nchar , nvarchar nebo varchar ).
Zde je stejný příklad jako předchozí, ale tento používá jiný oddělovač.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Výsledek:
Location -------------- Paris - France
Příklad databáze
Zde je příklad načítání dat z databáze a spojení dvou sloupců do jednoho, odděleného čárkou:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location
FROM city
INNER JOIN country ON
city.CountryCode = country.Code
WHERE country.Code = 'THA';
Výsledek:
Location --------------------------- Bangkok, Thailand Nonthaburi, Thailand Nakhon Ratchasima, Thailand Chiang Mai, Thailand Udon Thani, Thailand Hat Yai, Thailand Khon Kaen, Thailand Pak Kret, Thailand Nakhon Sawan, Thailand Ubon Ratchathani, Thailand Songkhla, Thailand Nakhon Pathom, Thailand
Hodnoty NULL
Pokud je některý z argumentů NULL hodnotu, SQL Server tuto hodnotu a její oddělovač přeskočí, ale ostatní zpracuje.
Příklad:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Výsledek:
Location ------------- Paris, France
Oddělovač hodnot NULL
Pokud je samotný oddělovač NULL hodnota, operace zřetězení bude stále provedena, ale bez oddělovače.
Příklad:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Výsledek:
Location ----------- ParisFrance
Toto je jeden z rozdílů mezi T-SQL a MySQL (MySQL má také CONCAT_WS() funkce). V MySQL, pokud je oddělovač NULL výsledkem zřetězení je NULL hodnotu.