V MySQL je to CONCAT_WS()
Funkce umožňuje přidat oddělovač ke zřetězeným řetězcům. Pokud použijete pouze CONCAT()
funkce, neměli byste žádný oddělovač (pokud jste explicitně nepřidali oddělovač jako argument mezi každý argument řetězce).
Běžné použití CONCAT_WS()
funkcí je vytvořit seznam oddělený čárkami.
Zde je příklad:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Výsledek:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
A můžete tam přidat mezeru, pokud chcete:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Výsledek:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
Oddělovač
Nic neříká, že oddělovač musí být čárka. Oddělovačem může být libovolný řetězec.
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 = 'NZL';
Výsledek:
+---------------------------+ | Location | +---------------------------+ | Auckland, New Zealand | | Christchurch, New Zealand | | Manukau, New Zealand | | North Shore, New Zealand | | Waitakere, New Zealand | | Wellington, New Zealand | | Dunedin, New Zealand | | Hamilton, New Zealand | | Lower Hutt, New Zealand | +---------------------------+
Hodnoty NULL
Pokud je některý z argumentů NULL
hodnotu, MySQL tuto hodnotu a její oddělovač přeskočí, ale ostatní zpracuje.
Příklad:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Výsledek:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
Oddělovač hodnot NULL
Pokud je samotný oddělovač NULL
hodnotu, operace zřetězení vrátí NULL
.
Příklad:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Výsledek:
+----------+ | Location | +----------+ | NULL | +----------+
To je jeden z rozdílů mezi MySQL a T-SQL (SQL Server, Azure). V T-SQL, pokud je oddělovač NULL
hodnota, hodnoty řetězce jsou stále zřetězené, ale bez oddělovače.