MySQL / MariaDB Об'єднати рядки в один рядок - Функції CONCAT() та CONCAT_WS()
- Останнє оновлення: 3 Листопада 2023 р.
- Перегляди: 267
- Автор: Адмін
Колеги всім привіт.
У сьогоднішній статті ми розглянемо як можна в базі даних 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;
Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.