sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man lägger till en separator till en sammanfogad sträng i SQL Server – CONCAT_WS()

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 (charncharnvarchar , 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.


  1. Isoleringsnivån Läs oengagerad

  2. EXTRACTA (datetime) Funktion i Oracle

  3. OLE DB-leverantören 'Microsoft.Jet.OLEDB.4.0' kan inte användas för distribuerade frågor

  4. Inkrementell statistik insamling i 11g