I SQL Server och Azure, om du behöver sammanfoga två eller flera strängar kan du använda T-SQL CONCAT()
fungera. Som med alla grundläggande sammanlänkningsoperationer, sammanfogar denna funktion strängarna, från början till slut.
Men vad händer om du behöver lägga till en separator mellan varje sträng?
Du kanske till exempel vill göra en kommaseparerad lista med strängar. I det här fallet vill du infoga ett kommatecken mellan varje sträng. Så här:
Paris, France
Istället för detta:
Paris, France
Lyckligtvis tillhandahåller T-SQL CONCAT_WS()
funktion som hjälper dig att göra just det. CONCAT_WS()
Funktionen fungerar precis som CONCAT()
funktion, förutom att det kräver ett extra argument – avgränsaren du vill använda.
Här är ett exempel:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Resultat:
Location ------------ Paris,France
Och du kan lägga till ett mellanslag där om du vill:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Resultat:
Location ------------- Paris, France
Separatorn
Det finns inget som säger att avgränsaren måste vara ett kommatecken. Avgränsaren kan vara ett uttryck av vilken teckentyp som helst (char
, nchar
, nvarchar
, eller varchar
).
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 = 'THA';
Resultat:
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
NULL-värden
Om något av argumenten är en NULL
värde, kommer SQL Server att hoppa över det värdet och dess separator, men den kommer fortfarande att bearbeta de andra.
Exempel:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Resultat:
Location ------------- Paris, France
NULL-värdesseparator
Om separatorn i sig är en NULL
värde, kommer sammanlänkningsoperationen fortfarande att utföras, men utan en separator.
Exempel:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Resultat:
Location ----------- ParisFrance
Detta är en av skillnaderna mellan T-SQL och MySQL (MySQL har också en CONCAT_WS()
fungera). I MySQL, om separatorn är en NULL
värde, resulterar sammanlänkningen i en NULL
värde.