I SQL Server og Azure, hvis du har brug for at sammenkæde to eller flere strenge, kan du bruge T-SQL CONCAT()
fungere. Som med enhver grundlæggende sammenkædningsoperation forbinder denne funktion strengene ende-til-ende.
Men hvad hvis du har brug for at tilføje en separator mellem hver streng?
For eksempel vil du måske lave en kommasepareret liste over strenge. I dette tilfælde vil du gerne indsætte et komma mellem hver streng. Sådan:
Paris, France
I stedet for dette:
Paris, France
Heldigvis leverer T-SQL CONCAT_WS()
funktion, der hjælper dig med at gøre præcis det. CONCAT_WS()
funktionen fungerer ligesom CONCAT()
funktion, bortset fra at det kræver et ekstra argument – den separator, du gerne vil bruge.
Her er et eksempel:
SELECT CONCAT_WS(',','Paris', 'France') AS Location;
Resultat:
Location ------------ Paris,France
Og du kan tilføje et mellemrum derinde, hvis du vil:
SELECT CONCAT_WS(', ','Paris', 'France') AS Location;
Resultat:
Location ------------- Paris, France
Separatoren
Der er ikke noget at sige til, at separatoren skal være et komma. Separatoren kan være et udtryk for enhver tegntype (char
, nchar
, nvarchar
, eller varchar
).
Her er det samme eksempel som det forrige, bortset fra at denne bruger en anden separator.
SELECT CONCAT_WS(' - ','Paris', 'France') AS Location;
Resultat:
Location -------------- Paris - France
Et databaseeksempel
Her er et eksempel på at hente data fra en database og kombinere to kolonner til én, adskilt af et komma:
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ærdier
Hvis nogen af argumenterne er en NULL
værdi, vil SQL Server springe over denne værdi og dens separator, men den vil stadig behandle de andre.
Eksempel:
SELECT CONCAT_WS(', ','Paris', NULL, 'France') AS Location;
Resultat:
Location ------------- Paris, France
NULL-værdiseparator
Hvis selve separatoren er en NULL
værdi, vil sammenkædningsoperationen stadig blive udført, men uden en separator.
Eksempel:
SELECT CONCAT_WS(NULL,'Paris', NULL, 'France') AS Location;
Resultat:
Location ----------- ParisFrance
Dette er en af forskellene mellem T-SQL og MySQL (MySQL har også en CONCAT_WS()
fungere). I MySQL, hvis separatoren er en NULL
værdi, resulterer sammenkædningen i en NULL
værdi.