I MariaDB, CONCAT_WS()
är en inbyggd strängfunktion som står för Concatenate With Separator.
CONCAT_WS()
utför en strängsammansättning på sina argument, där det första argumentet är avgränsaren för de återstående argumenten.
Sammanfogning är operationen att sammanfoga två eller flera strängar ände till ände.
CONCAT_WS()
accepterar två eller flera argument (även om att tillhandahålla bara två argument skulle resultera i att ingenting sammanlänkas, eftersom det första argumentet är avgränsaren och det andra är en enda sträng som ska sammanfogas med... inget annat).
Syntax
Syntaxen ser ut så här:
CONCAT_WS(separator,str1,str2,...)
Där separator
är strängen som ska användas som en separator, och str1, str2, …
representerar strängargumenten som ska sammanfogas.
Exempel
Här är ett grundläggande exempel:
SELECT CONCAT_WS( ', ', 'Milk', 'Cheese', 'Bread');
Resultat:
+------------------------------------------------------------+ | CONCAT_WS( ', ', 'Mjölk', 'Ost', 'Bröd') |+------------------------------------ ---------------+| Mjölk, ost, bröd |+-------------------------------------------- --+
I det här fallet sammanfogade vi tre strängar med ett kommatecken och ett mellanslag som avgränsare.
Här är en annan som använder en annan separator:
SELECT CONCAT_WS('-', 'Blue', 'Red', 'Green');
Resultat:
+----------------------------------------+| CONCAT_WS('-', 'Blå', 'Röd', 'Grön') |+------------------------------------ ----------+| Blå-röd-grön |+------------------------------------------------+
CONCAT_WS()
liknarCONCAT()
fungera. En av fördelarna medCONCAT_WS()
överCONCAT()
blir uppenbart när många strängar sammanfogas.För att göra föregående exempel med
CONCAT()
, måste vi upprepa avgränsaren mellan varje sträng.Så här:
SELECT CONCAT('Blue', '-', 'Red', '-', 'Green');
Resultat:
+--------------------------------------------------+| CONCAT('Blå', '-', 'Röd', '-', 'Grön') |+-------------------------------- ----------------+| Blå-Röd-Grön |+-------------------------------------------------+Det här kan bli otympligt om vi hade många strängar att sammanfoga.
Ingen separator
Att tillhandahålla en tom sträng som avgränsare sammanfogar strängarna utan en avgränsare:
SELECT CONCAT_WS('', 'Blue', 'Red', 'Green');
Resultat:
+-----------------------------------------------+| CONCAT_WS('', 'Blå', 'Röd', 'Grön') |+------------------------------------- --------+| BlueRedGreen |+-----------------------------------------------+I det här fallet får vi samma resultat som vi skulle få när vi använder
CONCAT()
för att sammanfoga dessa tre strängar.Det är viktigt att tillhandahålla en separator, även om den är tom. Om du inte tillhandahåller en avgränsare kommer den första sammanfogningssträngen att användas som avgränsare, vilket förmodligen inte är vad du vill ha.
Exempel:
SELECT CONCAT_WS('Blue', 'Red', 'Green', 'Orange');
Resultat:
+------------------------------------------------------------+ | CONCAT_WS('Blå', 'Röd', 'Grön', 'Orange') |+------------------------------------ ---------------+| RödBlåGrönBlåOrange |+------------------------------------------------------------+I det här fallet,
Blue
är det första argumentet, så det slutar med att det används som separator.Konkatenerande nollargument
En annan fördel som
CONCAT_WS()
har överCONCAT()
är att den ärnull
-säker.Om något av argumenten som ska sammanfogas är
null
,CONCAT_WS()
ignorerar dem.CONCAT()
funktion å andra sidan returnerarnull
(såvida den inte är i Oracle-läge, i så fall ignorerar dennull
argument).Låt oss anropa
CONCAT_WS()
med ennull
argument:SELECT CONCAT_WS('-', 'Blue', NULL, 'Green');
Resultat:
+-----------------------------------------------+| CONCAT_WS('-', 'Blå', NULL, 'Grön') |+-------------------------------- -------+| Blågrön |+-----------------------------------------------+Som förväntat,
CONCAT_WS()
hoppade över noll-argumentet och sammanfogade de återstående argumenten.Detta innebär att om vi tillhandahåller en tom sträng som avgränsare kan vi använda
CONCAT_WS()
som ennull
-säker version avCONCAT()
:SELECT CONCAT_WS('', 'Blue', NULL, 'Green');
Resultat:
+---------------------------------------------+| CONCAT_WS('', 'Blå', NULL, 'Grön') |+---------------------------------------- -----+| Blågrön |+----------------------------------------------+Nullavskiljare
Ange en
null
separator är en annan historia. Om du gör detta returnerasnull
.SELECT CONCAT_WS(NULL, 'Blue', 'Red', 'Green');
Resultat:
+------------------------------------------------+| CONCAT_WS(NULL, 'Blå', 'Röd', 'Grön') |+-------------------------------- ----------+| NULL |+-------------------------------------------------+Binära strängar
Om något av argumenten är en binär sträng, blir resultatet en binär sträng:
SELECT CONCAT_WS(', ', BINARY 'Apple', 'Orange');
Resultat:
+---------------------------------------------------------+| CONCAT_WS(', ', BINÄR 'Äpple', 'Orange') |+---------------------------------------- ----------+| Äpple, apelsin |+----------------------------------------------------+Vi kan använda
COLLATION()
funktion för att kontrollera sammanställningen av resultatet:SELECT COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange'));
Resultat:
+------------------------------------------------------ --------+| SAMLING(CONCAT_WS(', ', BINÄRT 'Äpple', 'Apelsin')) |+----------------------------------- ------------------------+| binär |+------------------------------------------------------ -------+Om vi tar bort
BINARY
operatör får vi ett annat resultat:SELECT COLLATION(CONCAT_WS(', ', 'Apple', 'Orange'));
Resultat:
+------------------------------------------------------ -+| COLLATION(CONCAT_WS(', ', 'Äpple', 'Apelsin')) |+------------------------------------- ----------------+| utf8_general_ci |+----------------------------------------------------- +Enstaka argument
Anropar
CONCAT_WS()
med endast ett argument returnerar ett fel:SELECT CONCAT_WS('Blue');
Resultat:
ERROR 1582 (42000):Fel parameterräkning i anropet till den inbyggda funktionen 'CONCAT_WS'Argument saknas
Anropar
CONCAT_WS()
utan att skicka några argument resulterar i ett fel:SELECT CONCAT_WS();
Resultat:
ERROR 1582 (42000):Fel parameterräkning i anropet till den inbyggda funktionen 'CONCAT_WS'