I MySQL er CONCAT_WS()
funktionen giver dig mulighed for at tilføje en separator til sammenkædede strenge. Hvis du bare bruger CONCAT()
funktion, ville du ikke have nogen separator (medmindre du eksplicit tilføjede en separator som et argument mellem hvert strengargument).
En almindelig brug af CONCAT_WS()
funktion er at oprette en kommasepareret liste.
Her er et eksempel:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Location;
Resultat:
+------------------+ | Location | +------------------+ | Sydney,Australia | +------------------+
Og du kan tilføje et mellemrum derinde, hvis du vil:
SELECT CONCAT_WS(', ','Sydney', 'Australia') AS Location;
Resultat:
+-------------------+ | Location | +-------------------+ | Sydney, Australia | +-------------------+
Separatoren
Der er ikke noget at sige til, at separatoren skal være et komma. Separatoren kan være en hvilken som helst streng.
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 = '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ærdier
Hvis nogen af argumenterne er en NULL
værdi, vil MySQL springe over den værdi og dens separator, men den vil stadig behandle de andre.
Eksempel:
SELECT CONCAT_WS(', ','Auckland', NULL, 'New Zealand') AS Location;
Resultat:
+-----------------------+ | Location | +-----------------------+ | Auckland, New Zealand | +-----------------------+
NULL-værdiseparator
Hvis selve separatoren er en NULL
værdi, vil sammenkædningsoperationen returnere NULL
.
Eksempel:
SELECT CONCAT_WS(NULL,'Auckland', NULL, 'New Zealand') AS Location;
Resultat:
+----------+ | Location | +----------+ | NULL | +----------+
Dette er en af forskellene mellem MySQL og T-SQL (SQL Server, Azure). I T-SQL, hvis separatoren er en NULL
værdi, er strengværdierne stadig sammenkædet, men uden en separator.