MySQL / MariaDB Объединить строки в одну строку - Функции CONCAT() и CONCAT_WS()
- Последнее обновление: 3 Ноября 2023 г.
- Просмотры: 3102
- Автор: Админ
Коллеги всем привет.
В сегодняшней статье мы рассмотрим как можно в базе данных MySQL и MariaDB объединять строки в одну строку. Казалось бы, это достаточно простая задача, но не все так просто. Объединение полей строк в отдельное поле в наборе результатов возможно с помощью нескольких функций управления строками. За объединение строк в базе данных MySQL и MariaDB отвечают две функции CONCAT() и CONCAT_WS().
Смотреть как работают функции мы будем на таблице fio которую я создал и добавил в неё несколько строк.
Функция CONCAT().
Синтаксис функции:
SELECT CONCAT(string_1,string_2,...) FROM table_name WHERE field_name = value
Функция может принимать один и более строк для объединения.
В первом варианте мы попробуем объединить два поля, имя и фамилию пользователя.
sql> SELECT CONCAT(first_name, ' ' ,last_name) AS fio FROM fio WHERE id = '1';
Как видим в результате у нас объединились два поля, но между ними нет разделителя.
Для того чтобы добавить разделитель, можно добавить еще одну строку, но она будет в качестве пробела.
sql> SELECT CONCAT(first_name, ' ' ,last_name) AS fio FROM fio WHERE id = '1';
При объединении строк с помощью функции CONCAT() нужно учитывать одну очень важную деталь, если в одном из полей окажется NULL, то функция вернут NULL.
sql> SELECT CONCAT(first_name, middle_name) AS fio FROM fio WHERE id = '5';
Функция CONCAT_WS().
Синтаксис функции:
SELECT CONCAT_WS(separator, string_1,string_2,...) FROM table_name WHERE field_name = value
Функция CONCAT_WS отличается от функции CONCAT тем что CONCAT_WS принимает первым параметром разделитель строк, а уже потом поля строк которые мы хотим объединить.
Мы будем использовать те же примеры, что выше я показывал, но только теперь вместо функции CONCAT мы будем использовать функцию CONCAT_WS с разделителем.
В первом варианте мы попробуем объединить два поля, имя и фамилию пользователя.
sql> SELECT CONCAT_WS('-',first_name, last_name) FROM fio WHERE id = 1;
Как мы помним из примера выше что если передать в функцию CONCAT значения NULL то и сама функция вернут NULL. С функцией CONCAT_WS все немного по другому, если в одном из полей окажется значения NULL то функция вернут значения того поля которые не является NULL.
sql> SELECT CONCAT_WS('-',first_name, middle_name) FROM fio WHERE id = 5;
Всем спасибо, я надеюсь что вам моя статья хоть чем-то помогла.