В MariaDB, CONCAT_WS() е вградена функция за низ, която означава Concatenate With Separator.
CONCAT_WS() извършва конкатенация на низове върху своите аргументи, като първият аргумент е разделител за останалите аргументи.
Конкатенацията е операцията за свързване на два или повече низове от край до край.
CONCAT_WS() приема два или повече аргумента (въпреки че предоставянето на само два аргумента би довело до нищо не свързано, тъй като първият аргумент е разделител, а вторият е единичен низ, който да бъде свързан с... нищо друго).
Синтаксис
Синтаксисът е така:
CONCAT_WS(separator,str1,str2,...)
Където separator е низът, който ще се използва като разделител, и str1, str2, … представляват низовите аргументи, за които да се конкатенира.
Пример
Ето един основен пример:
SELECT CONCAT_WS( ', ', 'Milk', 'Cheese', 'Bread'); Резултат:
+----------------------------------------------------+ | CONCAT_WS( ', ', 'Мляко', 'Сирене', 'Хляб') |+------------------------------ ---------------+| Мляко, сирене, хляб |+--------------------------------------------------- --+
В този случай съединихме три низа, използвайки запетая и интервал като разделител.
Ето още един, който използва различен разделител:
SELECT CONCAT_WS('-', 'Blue', 'Red', 'Green'); Резултат:
+---------------------------------------+| CONCAT_WS('-', 'Синьо', 'Червено', 'Зелено') |+------------------------------ ----------+| Синьо-Червено-Зелено |+---------------------------------------+предварително>
CONCAT_WS() е подобен на CONCAT() функция. Едно от предимствата на CONCAT_WS() над CONCAT() става очевидно при конкатениране на много низове.
За да направите предишния пример с CONCAT() , ще трябва да повторим разделителя между всеки низ.
Като това:
SELECT CONCAT('Blue', '-', 'Red', '-', 'Green');
Резултат:
+------------------------------------+| CONCAT('Синьо', '-', 'Червено', '-', 'Зелено') |+-------------------------- ----------------+| Синьо-червено-зелено |+---------------------------------------------------+
Това може да стане тромаво, ако имахме много низове за конкатенация.
Без разделител
Предоставяне на празен низ, тъй като разделителят конкатенира низовете без разделител:
SELECT CONCAT_WS('', 'Blue', 'Red', 'Green');
Резултат:
+---------------------------------------+| CONCAT_WS('', 'Синьо', 'Червено', 'Зелено') |+------------------------------ --------+| BlueRedGreen |+------------------------------------------------+
В този случай получаваме същия резултат, който бихме получили, когато използваме CONCAT() за да свържете тези три низа.
Важно е да предоставите разделител, дори и да е празен. Ако не предоставите разделител, първият низ за конкатенация ще бъде използван като разделител, което вероятно не е това, което искате.
Пример:
SELECT CONCAT_WS('Blue', 'Red', 'Green', 'Orange');
Резултат:
+----------------------------------------------------+ | CONCAT_WS('Синьо', 'Червено', 'Зелено', 'Оранжево') |+------------------------------ ---------------+| ЧервеноСиньоЗеленоСиньоОранжево |+-----------------------------------------------------+предварително>
В този случай Blue е първият аргумент и така в крайна сметка се използва като разделител.
Конкатенация на нулеви аргументи
Друго предимство, което CONCAT_WS() има над CONCAT() е, че е null -безопасно.
Ако някой от аргументите, които трябва да бъдат конкатенирани, е null , CONCAT_WS() ги игнорира. CONCAT() функцията от друга страна връща null (освен ако не е в режим на Oracle, в този случай игнорира null аргументи).
Нека извикаме CONCAT_WS() с null аргумент:
SELECT CONCAT_WS('-', 'Blue', NULL, 'Green');
Резултат:
+---------------------------------------+| CONCAT_WS('-', 'Синьо', NULL, 'Зелено') |+-------------------------------- -------+| Синьо-зелено |+------------------------------------------------+
Както се очаква, CONCAT_WS() пропусна аргумента null и обедини останалите аргументи.
Това означава, че ако предоставим празен низ като разделител, можем да използваме CONCAT_WS() като null -безопасна версия на CONCAT() :
SELECT CONCAT_WS('', 'Blue', NULL, 'Green');
Резултат:
+----------------------------------------+| CONCAT_WS('', 'Синьо', NULL, 'Зелено') |+--------------------------------- -----+| BlueGreen |+----------------------------------------+ Нулев разделител
Предоставяне на null разделител е друга история. Това връща null .
SELECT CONCAT_WS(NULL, 'Blue', 'Red', 'Green');
Резултат:
+-----------------------------------+| CONCAT_WS(NULL, 'Синьо', 'Червено', 'Зелено') |+-------------------------------- ---------+| NULL |+-----------------------------------+
Двоични низове
Ако някой от аргументите е двоичен низ, резултатът е двоичен низ:
SELECT CONCAT_WS(', ', BINARY 'Apple', 'Orange');
Резултат:
+------------------------------------+| CONCAT_WS(', ', BINARY 'Apple', 'Orange') |+-------------------------------- ----------+| Ябълка, портокал |+---------------------------------------------------+предварително>
Можем да използваме COLLATION() функция за проверка на съпоставянето на резултата:
SELECT COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange'));
Резултат:
+------------------------------------------------------- --------+| COLLATION(CONCAT_WS(', ', BINARY 'Apple', 'Orange')) |+------------------------------ ------------------------+| двоичен |+-------------------------------------------------------- -------+
Ако премахнем BINARY оператор, получаваме различен резултат:
SELECT COLLATION(CONCAT_WS(', ', 'Apple', 'Orange'));
Резултат:
+------------------------------------------------------- -+| COLLATION(CONCAT_WS(', ', 'Ябълка', 'Оранжев')) |+------------------------------ ----------------+| utf8_general_ci |+------------------------------------------------------- + Единичен аргумент
Извикване на CONCAT_WS() само с един аргумент връща грешка:
SELECT CONCAT_WS('Blue');
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой на параметрите в извикването на естествена функция „CONCAT_WS“
Липсващи аргументи
Извикване на CONCAT_WS() без подаване на аргументи води до грешка:
SELECT CONCAT_WS();
Резултат:
ГРЕШКА 1582 (42000):Неправилен брой на параметрите в извикването на естествена функция „CONCAT_WS“