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.