I MariaDB, CONCAT()
är en inbyggd strängfunktion som utför en strängsammansättning på dess argument. Den returnerar strängen som resulterar från sammanlänkning av dess argument.
Sammanfogning är operationen att sammanfoga två eller flera strängar ände till ände.
CONCAT()
accepterar ett eller flera argument, som alla returneras som en enda sammanfogad sträng.
Syntax
Syntaxen ser ut så här:
CONCAT( str1, str2, ... )
Där str1, str2, …
representerar strängargumenten som ska sammanfogas.
Exempel
Här är ett grundläggande exempel:
SELECT CONCAT('Homer', 'Jay');
Resultat:
+------------------------+| CONCAT('Homer', 'Jay') |+------------------------+| HomerJay |+------------------------+
I det här fallet sammanfogade vi två strängar.
Här är den igen, men den här gången lägger vi till ett mellanslag däremellan:
SELECT CONCAT('Homer', ' ', 'Jay');
Resultat:
+-------------------------------------+| CONCAT('Homer', ' ', 'Jay') |+------------------------------------+| Homer Jay |+-------------------------------------+
I det här fallet sammanfogade vi tre strängar.
Här är den med fem:
SELECT CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson');
Resultat:
+------------------------------------------------------------+ | CONCAT('Homer', ' ', 'Jay', ' ', 'Simpson') |+-------------------------------- ------------------+| Homer Jay Simpson |+----------------------------------------------------- +
Binära strängar
Om något av argumenten är en binär sträng, blir resultatet en binär sträng:
SELECT CONCAT(BINARY 'Homer', 'Jay');
Resultat:
+--------------------------------------+| CONCAT(BINÄR 'Homer', 'Jay') |+-------------------------------------+| HomerJay |+--------------------------------------+
Vi kan använda COLLATION()
funktion för att kontrollera sammanställningen av resultatet:
SELECT COLLATION(CONCAT(BINARY 'Homer', 'Jay'));
Resultat:
+--------------------------------------------------+| COLLATION(CONCAT(BINÄR 'Homer', 'Jay')) |+---------------------------------------- --------+| binär |+--------------------------------------------------+
Om vi tar bort BINARY
operatör får vi ett annat resultat:
SELECT COLLATION(CONCAT('Homer', 'Jay'));
Resultat:
+----------------------------------------+| COLLATION(CONCAT('Homer', 'Jay')) |+---------------------------------------- +| utf8_general_ci |+-----------------------------------------+
Enligt MariaDB-dokumentationen konverteras också numeriska argument till sin motsvarande binära strängform. Du kan undvika detta genom att göra en explicit typcast (med CAST()
eller CONVERT()
).
Nollargument
Om något av argumenten är null
, CONCAT()
returnerar null
.
Det finns dock ett undantag:i Oracle-läge (d.v.s. sql_mode=ORACLE
), någon null
argument ignoreras helt enkelt.
Låt oss först se hur CONCAT()
fungerar i standardläge.
Ställ in vår session på standardläge:
SET SESSION sql_mode=DEFAULT;
Kör nu CONCAT()
med en null
argument:
SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Resultat:
+----------------------------------------------------+| CONCAT('Homer', ' ', null, ' ', 'Simpson') |+------------------------------------ --------------+| NULL |+----------------------------------------------------+Som förväntat är resultatet
null
.Låt oss nu byta vår session till Oracle-läge:
SET SESSION sql_mode=ORACLE;
Och låt oss nu köra föregående
CONCAT()
exempel igen:SELECT CONCAT('Homer', ' ', null, ' ', 'Simpson');
Resultat:
+----------------------------------------------------+| CONCAT('Homer', ' ', null, ' ', 'Simpson') |+------------------------------------ --------------+| Homer Simpson |+----------------------------------------------------+Den här gången ignorerade den
null
argument och sammanlänkade alla återstående icke-null
argument. Om du tittar noga ser du att det sammanlänkade båda utrymmena, så det finns ett dubbelt mellanslag mellanHomer
ochSimpson
.För en
null
-säkert alternativ, användCONCAT_WS()
. Den funktionen ignorerarnull
värden, även när de inte är i Oracle-läge.Alternativt kan du använda
IFNULL()
för att tillhandahålla ett alternativt (sträng)värde förnull
värden (som en tom sträng).Enstaka argument
Anropar
CONCAT()
med bara ett argument returnerar helt enkelt det argumentet:SELECT CONCAT('Homer');
Resultat:
+----------------+| CONCAT('Homer') |+-----------------+| Homer |+-----------------+Argument saknas
Anropar
CONCAT()
utan att skicka några argument resulterar i ett fel:SELECT CONCAT();
Resultat:
ERROR 1582 (42000):Fel parameterräkning i anropet till den ursprungliga funktionen 'CONCAT'