I MariaDB, CONCAT_WS()
er en indbygget strengfunktion, der står for Sammenkædning Med Separator.
CONCAT_WS()
udfører en strengsammenkædning på sine argumenter, hvor det første argument er separatoren for de resterende argumenter.
Sammenkædning er operationen med at forbinde to eller flere strenge ende-til-ende.
CONCAT_WS()
accepterer to eller flere argumenter (selvom kun to argumenter ville resultere i, at intet sammenkædes, da det første argument er separatoren, og det andet er en enkelt streng, der skal sammenkædes med... intet andet).
Syntaks
Syntaksen ser sådan ud:
CONCAT_WS(separator,str1,str2,...)
Hvor separator
er strengen, der skal bruges som separator, og str1, str2, …
repræsenterer de strengargumenter, som skal sammenkædes.
Eksempel
Her er et grundlæggende eksempel:
SELECT CONCAT_WS( ', ', 'Milk', 'Cheese', 'Bread');
Resultat:
+-----------------------------------------------------+ | CONCAT_WS( ', ', 'Mælk', 'Ost', 'Brød') |+---------------------------------------- ---------------+| Mælk, ost, brød |+-------------------------------------------- --+
I dette tilfælde sammenkædede vi tre strenge ved hjælp af et komma og et mellemrum som separator.
Her er en anden, der bruger en anden separator:
SELECT CONCAT_WS('-', 'Blue', 'Red', 'Green');
Resultat:
+----------------------------------------+| CONCAT_WS('-', 'Blå', 'Rød', 'Grøn') |+----------------------------------- ----------+| Blå-rød-grøn |+------------------------------------------------+
CONCAT_WS()
lignerCONCAT()
fungere. En af fordelene vedCONCAT_WS()
overCONCAT()
bliver tydeligt, når mange strenge sammenkædes.For at gøre det forrige eksempel med
CONCAT()
, bliver vi nødt til at gentage separatoren mellem hver streng.Sådan:
SELECT CONCAT('Blue', '-', 'Red', '-', 'Green');
Resultat:
+--------------------------------------------------+| CONCAT('Blå', '-', 'Rød', '-', 'Grøn') |+-------------------------------- ----------------+| Blå-Rød-Grøn |+------------------------------------------------+Dette kunne blive besværligt, hvis vi havde mange strenge at sammenkæde.
Ingen separator
Angivelse af en tom streng som separator sammenkæder strengene uden en separator:
SELECT CONCAT_WS('', 'Blue', 'Red', 'Green');
Resultat:
+----------------------------------------------+| CONCAT_WS('', 'Blå', 'Rød', 'Grøn') |+------------------------------------- --------+| BlueRedGreen |+-----------------------------------------------+I dette tilfælde får vi det samme resultat, som vi ville få, når vi bruger
CONCAT()
at sammenkæde disse tre strenge.Det er vigtigt at have en separator, selvom den er tom. Hvis du ikke angiver en separator, vil den første sammenkædningsstreng blive brugt som separator, hvilket sandsynligvis ikke er, hvad du ønsker.
Eksempel:
SELECT CONCAT_WS('Blue', 'Red', 'Green', 'Orange');
Resultat:
+-----------------------------------------------------+ | CONCAT_WS('Blå', 'Rød', 'Grøn', 'Orange') |+------------------------------------ ---------------+| RødBlåGrønBlåOrange |+------------------------------------------------------------+I dette tilfælde
Blue
er det første argument, og så ender det med at blive brugt som separator.Sammenkædede nulargumenter
En anden fordel, som
CONCAT_WS()
har overCONCAT()
er, at den ernull
-sikker.Hvis nogle af argumenterne, der skal sammenkædes, er
null
,CONCAT_WS()
ignorerer dem.CONCAT()
funktion på den anden side returnerernull
(medmindre det er i Oracle-tilstand, i hvilket tilfælde det ignorerernull
argumenter).Lad os kalde
CONCAT_WS()
med ennull
argument:SELECT CONCAT_WS('-', 'Blue', NULL, 'Green');
Resultat:
+----------------------------------------------+| CONCAT_WS('-', 'Blå', NULL, 'Grøn') |+-------------------------------- -------+| Blå-grøn |+----------------------------------------------+Som forventet,
CONCAT_WS()
sprang over nul-argumentet og sammenkædede de resterende argumenter.Dette betyder, at hvis vi angiver en tom streng som separator, kan vi bruge
CONCAT_WS()
som ennull
-sikker version afCONCAT()
:SELECT CONCAT_WS('', 'Blue', NULL, 'Green');
Resultat:
+---------------------------------------------+| CONCAT_WS('', 'Blå', NULL, 'Grøn') |+---------------------------------------- -----+| Blågrøn |+---------------------------------------------+Nulseparator
Angivelse af en
null
separator er en anden historie. Hvis du gør dette, returneresnull
.SELECT CONCAT_WS(NULL, 'Blue', 'Red', 'Green');
Resultat:
+------------------------------------------------+| CONCAT_WS(NULL, 'Blå', 'Rød', 'Grøn') |+-------------------------------- ----------+| NULL |+-------------------------------------------------+Binære strenge
Hvis et af argumenterne er en binær streng, er resultatet en binær streng:
SELECT CONCAT_WS(', ', BINARY 'Apple', 'Orange');
Resultat:
+----------------------------------------------+| CONCAT_WS(', ', BINÆR 'Æble', 'Orange') |+---------------------------------------- ----------+| Æble, Orange |+----------------------------------------------------+Vi kan bruge
COLLATION()
funktion til at kontrollere sammenstillingen af resultatet:SELECT COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange'));
Resultat:
+---------------------------------------------- --------+| COLLATION(CONCAT_WS(', ', BINÆR 'Æble', 'Orange')) |+------------------------------------ ------------------------+| binær |+------------------------------------------------------ -------+Hvis vi fjerner den
BINARY
operatør, får vi et andet resultat:SELECT COLLATION(CONCAT_WS(', ', 'Apple', 'Orange'));
Resultat:
+---------------------------------------------- -+| COLLATION(CONCAT_WS(', ', 'Apple', 'Orange')) |+------------------------------------- ----------------+| utf8_general_ci |+----------------------------------------------------- +Enkelt argument
Kalder
CONCAT_WS()
med kun et argument returnerer en fejl:SELECT CONCAT_WS('Blue');
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'CONCAT_WS'Manglende argumenter
Kalder
CONCAT_WS()
uden at sende nogen argumenter resulterer det i en fejl:SELECT CONCAT_WS();
Resultat:
FEJL 1582 (42000):Forkert parameterantal i kaldet til den oprindelige funktion 'CONCAT_WS'