sql >> Database teknologi >  >> RDS >> MariaDB

Hvordan CONCAT_WS() virker i MariaDB

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() ligner CONCAT() fungere. En af fordelene ved CONCAT_WS() over CONCAT() 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 over CONCAT() er, at den er null -sikker.

Hvis nogle af argumenterne, der skal sammenkædes, er null , CONCAT_WS() ignorerer dem. CONCAT() funktion på den anden side returnerer null (medmindre det er i Oracle-tilstand, i hvilket tilfælde det ignorerer null argumenter).

Lad os kalde CONCAT_WS() med en null 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 en null -sikker version af CONCAT() :

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, returneres null .

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'

  1. Sådan installeres MySQL på Debian 7

  2. ACID-egenskaberne for erklæringer og transaktioner

  3. Ukendt kolonne i 'feltliste'-fejl på MySQL Update-forespørgsel

  4. Hvorfor er PostgreSQL-arrayadgang så meget hurtigere i C end i PL/pgSQL?