В MySQL, CONCAT_WS()
функцията ви позволява да добавите разделител към конкатенирани низове. Ако просто използвате CONCAT()
функция, няма да имате разделител (освен ако не сте добавили изрично разделител като аргумент между всеки аргумент на низ).
Често срещано използване на CONCAT_WS()
функцията е да създаде списък, разделен със запетая.
Ето един пример:
SELECT CONCAT_WS(',','Sydney', 'Australia') AS Местоположение;
Резултат:
+-----------------+| Местоположение |+------------------+| Сидни, Австралия |+-----------------+
И можете да добавите интервал там, ако искате:
SELECT CONCAT_WS(', ','Сидни', 'Австралия') AS Местоположение;
Резултат:
+------------------+| Местоположение |+-------------------+| Сидни, Австралия |+------------------+
Разделителят
Няма какво да се каже, че разделителят трябва да е запетая. Разделителят може да бъде произволен низ.
Ето същия пример като предишния, с изключение на това, че този използва различен разделител.
SELECT CONCAT_WS(' - ','Париж', 'Франция') AS Местоположение;
Резултат:
+----------------+| Местоположение |+----------------+| Париж - Франция |+----------------+
Пример за база данни
Ето пример за извличане на данни от база данни и комбиниране на две колони в една, разделени със запетая:
SELECT CONCAT_WS(', ', city.Name, country.Name ) КАТО МестоположениеFROM cityINNER JOIN country ONcity.CountryCode =country.CodeWHERE country.Code ='NZL';
Резултат:
+---------------------+| Местоположение |+--------------------------+| Окланд, Нова Зеландия || Крайстчърч, Нова Зеландия || Манукау, Нова Зеландия || Северен бряг, Нова Зеландия || Waitakere, Нова Зеландия || Уелингтън, Нова Зеландия || Дънедин, Нова Зеландия || Хамилтън, Нова Зеландия || Лоуър Хът, Нова Зеландия |+--------------------------+
NULL стойности
Ако някой от аргументите е NULL
стойност, MySQL ще пропусне тази стойност и нейния разделител, но все пак ще обработи останалите.
Пример:
SELECT CONCAT_WS(', ','Окланд', NULL, 'Нова Зеландия') AS Местоположение;
Резултат:
<пред>+-----------------------+| Местоположение |+-----------------------+| Окланд, Нова Зеландия |+-----------------------+Разделител на стойности NULL
Ако самият разделител е NULL
стойност, операцията за конкатенация ще върне NULL
.
Пример:
SELECT CONCAT_WS(NULL,'Окланд', NULL, 'Нова Зеландия') AS Местоположение;
Резултат:
+---------+| Местоположение |+---------+| NULL |+----------+
Това е една от разликите между MySQL и T-SQL (SQL Server, Azure). В T-SQL, ако разделителят е NULL
стойност, стойностите на низовете все още са свързани, но без разделител.