I MySQL, CONCAT_WS()
funktionen låter dig lägga till en separator till sammanlänkade strängar. Om du bara använder CONCAT()
funktion, skulle du inte ha någon avgränsare (såvida du inte uttryckligen lagt till en avgränsare som ett argument mellan varje strängargument).
En vanlig användning av CONCAT_WS()
funktionen är att skapa en kommaavgränsad lista.
Här är ett exempel:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Resultat:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
Och du kan lägga till ett mellanslag där om du vill:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Resultat:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
Separatorn
Det finns inget som säger att avgränsaren måste vara ett kommatecken. Separatorn kan vara vilken sträng som helst.
Här är samma exempel som det föregående, förutom att det här använder en annan separator.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Resultat:
+----------------+ | Location | +----------------+ | Paris - France | +----------------+
Ett databasexempel
Här är ett exempel på att hämta data från en databas och kombinera två kolumner till en, åtskilda av ett kommatecken:
SELECT CONCAT_WS(', ', city.Name, country.Name ) AS Location FROM city INNER JOIN country ON city.CountryCode = country.Code WHERE country.Code = 'NZL';
Resultat:
+---------------------------+ | 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 | +---------------------------+
NULL-värden
Om något av argumenten är en NULL
värde, kommer MySQL att hoppa över det värdet och dess separator, men det kommer fortfarande att bearbeta de andra.
Exempel:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Resultat:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
NULL-värdesseparator
Om separatorn i sig är en NULL
värde, kommer sammanlänkningsoperationen att returnera NULL
.
Exempel:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Resultat:
+----------+ | Location | +----------+ | NULL | +----------+
Detta är en av skillnaderna mellan MySQL och T-SQL (SQL Server, Azure). I T-SQL, om separatorn är en NULL
värde, är strängvärdena fortfarande sammanlänkade, men utan en separator.