sql >> Databáze >  >> RDS >> MariaDB

Jak funguje CONCAT_WS() v MariaDB

V MariaDB, CONCAT_WS() je vestavěná funkce řetězce, která znamená Concatenate With Separator.

CONCAT_WS() provede u svých argumentů zřetězení řetězců, přičemž první argument je oddělovač pro zbývající argumenty.

Zřetězení je operace spojování dvou nebo více řetězců end-to-end.

CONCAT_WS() přijímá dva nebo více argumentů (ačkoli poskytnutí pouze dvou argumentů by vedlo k tomu, že by se nic nezřetězovalo, protože první argument je oddělovač a druhý je jeden řetězec, s nímž se má spojit... nic jiného).

Syntaxe

Syntaxe vypadá takto:

CONCAT_WS(separator,str1,str2,...) 

Kde separator je řetězec, který se má použít jako oddělovač, a str1, str2, … představují argumenty řetězce, pro které se mají zřetězit.

Příklad

Zde je základní příklad:

SELECT CONCAT_WS( ', ', 'Milk', 'Cheese', 'Bread'); 

Výsledek:

+---------------------------------------------+ | CONCAT_WS( ', ', 'Mléko', 'Sýr', 'Chléb') |+------------------------------- ----------------+| Mléko, sýr, chléb |+------------------------------------------- --+

V tomto případě jsme zřetězili tři řetězce pomocí čárky a mezery jako oddělovače.

Zde je další, který používá jiný oddělovač:

SELECT CONCAT_WS('-', 'Blue', 'Red', 'Green'); 

Výsledek:

+----------------------------------------+| CONCAT_WS('-', 'Modrá', 'Červená', 'Zelená') |+------------------------------ ----------+| Modrá-Červená-Zelená |+----------------------------------------+ 

CONCAT_WS() je podobný CONCAT() funkce. Jedna z výhod CONCAT_WS() přes CONCAT() se projeví při zřetězení mnoha řetězců.

Chcete-li provést předchozí příklad pomocí CONCAT() , museli bychom opakovat oddělovač mezi každým řetězcem.

Takhle:

SELECT CONCAT('Blue', '-', 'Red', '-', 'Green'); 

Výsledek:

+------------------------------------------+| CONCAT('Modrá', '-', 'Červená', '-', 'Zelená') |+-------------------------- -----------------+| Modrá-Červená-Zelená |+------------------------------------------+ 

To by mohlo být nepraktické, pokud bychom měli mnoho řetězců ke zřetězení.

Bez oddělovače

Zadáním prázdného řetězce jako oddělovače zřetězíte řetězce bez oddělovače:

SELECT CONCAT_WS('', 'Blue', 'Red', 'Green'); 

Výsledek:

+---------------------------------------+| CONCAT_WS('', 'Modrá', 'Červená', 'Zelená') |+------------------------------- --------+| BlueRedGreen |+---------------------------------------+

V tomto případě dostaneme stejný výsledek, jaký bychom dostali při použití CONCAT() zřetězit tyto tři řetězce.

Je důležité poskytnout oddělovač, i když je prázdný. Pokud nezadáte oddělovač, bude jako oddělovač použit první řetězec zřetězení, což pravděpodobně není to, co chcete.

Příklad:

SELECT CONCAT_WS('Blue', 'Red', 'Green', 'Orange'); 

Výsledek:

+---------------------------------------------+ | CONCAT_WS('Modrá', 'Červená', 'Zelená', 'Oranžová') |+------------------------------- ----------------+| RedBlueGreenBlueOrange |+---------------------------------------------+ 

V tomto případě Blue je první argument, a tak se nakonec použije jako oddělovač.

Zřetězení nulových argumentů

Další výhodou je CONCAT_WS() má více než CONCAT() je, že je null -bezpečný.

Pokud je některý z argumentů, které mají být zřetězeny, null , CONCAT_WS() ignoruje je. CONCAT() funkce na druhé straně vrací null (pokud to není v režimu Oracle, v takovém případě ignoruje null argumenty).

Zavolejte CONCAT_WS() s null argument:

SELECT CONCAT_WS('-', 'Blue', NULL, 'Green'); 

Výsledek:

+---------------------------------------+| CONCAT_WS('-', 'Modrá', NULL, 'Zelená') |+-------------------------------- -------+| Modro-zelená |+---------------------------------------+

Podle očekávání CONCAT_WS() přeskočil argument null a zřetězil zbývající argumenty.

To znamená, že pokud zadáme prázdný řetězec jako oddělovač, můžeme použít CONCAT_WS() jako null -bezpečná verze CONCAT() :

SELECT CONCAT_WS('', 'Blue', NULL, 'Green'); 

Výsledek:

+--------------------------------------+| CONCAT_WS('', 'Modrá', NULL, 'Zelená') |+--------------------------------- -----+| BlueGreen |+--------------------------------------+

Nulový oddělovač

Poskytnutí null separátor je jiný příběh. Tím se vrátí null .

SELECT CONCAT_WS(NULL, 'Blue', 'Red', 'Green'); 

Výsledek:

+-----------------------------------------+| CONCAT_WS(NULL, 'Modrá', 'Červená', 'Zelená') |+-------------------------------- ---------+| NULL |+-----------------------------------------+

Binární řetězce

Pokud je některý z argumentů binární řetězec, výsledkem je binární řetězec:

SELECT CONCAT_WS(', ', BINARY 'Apple', 'Orange'); 

Výsledek:

+-------------------------------------------+| CONCAT_WS(', ', BINARY 'Apple', 'Oranžová') |+--------------------------------- ----------+| Apple, Orange |+-------------------------------------------+ 

Můžeme použít COLLATION() funkce pro kontrolu seřazení výsledku:

SELECT COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange')); 

Výsledek:

+---------------------------------------------- --------+| COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Oranžová')) |+------------------------------ -------------------------+| binární |+----------------------------------------------- -------+

Pokud odstraníme BINARY operátor, dostaneme jiný výsledek:

SELECT COLLATION(CONCAT_WS(', ', 'Apple', 'Orange')); 

Výsledek:

+---------------------------------------------- -+| COLLATION(CONCAT_WS(', ', 'Apple', 'Oranžová')) |+------------------------------- -----------------+| utf8_general_ci |+----------------------------------------------- +

Jeden argument

Volání CONCAT_WS() pouze s jedním argumentem vrátí chybu:

SELECT CONCAT_WS('Blue'); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'CONCAT_WS'

Chybí argumenty

Volání CONCAT_WS() bez předání jakýchkoli argumentů dojde k chybě:

SELECT CONCAT_WS(); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'CONCAT_WS'

  1. Jak zabráním opakování spouštěče databáze?

  2. Sloučení/kombinace více souborů PDF do jednoho PDF v Oracle pomocí balíčku PLPDF_TOOLKIT PL/SQL

  3. Oracle Apex 5.0 – Zobrazení statického obrazu

  4. Vydán SQL Developer 4.1.3