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'