sql >> Databasteknik >  >> RDS >> MariaDB

Hur CONCAT_WS() fungerar i MariaDB

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() liknar CONCAT() fungera. En av fördelarna med CONCAT_WS() över CONCAT() 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 över CONCAT() är att den är null -säker.

Om något av argumenten som ska sammanfogas är null , CONCAT_WS() ignorerar dem. CONCAT() funktion å andra sidan returnerar null (såvida den inte är i Oracle-läge, i så fall ignorerar den null argument).

Låt oss anropa CONCAT_WS() med en null 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 en null -säker version av CONCAT() :

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 returneras null .

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'

  1. Vad är LEN() i SQL Server?

  2. MariaDB Backup &PostgreSQL i molnet - ClusterControl Release 1.6.1

  3. LPAD() Funktion i PostgreSQL

  4. ODP.NET Oracle.ManagedDataAcess slumpmässiga ORA-12570-fel