Объединение двух столбцов в MySQL с использованием COALESCE
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы объединить столбцы col1
и col2
в новый столбец combined_col
, используйте функцию CONCAT()
:
SELECT CONCAT(`col1`, ' ', `col2`) AS `combined_col` FROM `table`;
Если хочется добавить разделитель и исключить значения NULL, применяйте CONCAT_WS()
:
SELECT CONCAT_WS(' ', `col1`, `col2`) AS `combined_col` FROM `table`;
Обработка специфичных типов данных и значений NULL
Когда объединяется столбцы с разными типами данных, приведите их к единому типу:
SELECT CONCAT(CAST(`numeric_col` AS CHAR), ' ', `string_col`) AS `combined_col` FROM `table`;
Чтобы не допустить усечения текста из-за переполнения столбца, ограничьте размер текста:
SELECT CONCAT(LEFT(`long_text_col`, 255), ' – ', `short_text_col`) AS `combined_col` FROM `table`;
CONCAT_WS()
игнорирует значения NULL, когда как CONCAT()
вернёт NULL, если как минимум один из аргументов равен NULL:
SELECT CONCAT_WS(' ', `col1`, `col2`) AS `combined_col` FROM `table`;
SELECT CONCAT(`col1`, ' ', `col2`) AS `combined_col` FROM `table`;
Выбор псевдонима, как выбор имени супергероя
Псевдонимы (aliases) упрощают идентификацию объединённых столбцов. Вот пример использования псевдонима:
SELECT CONCAT(`FirstName`, ' ', `LastName`) AS `FullName` FROM `Users`;
Это особо удобно, когда данные экспортируются в CSV-файлы.
Визуализация
Пусть у нас имеются два цветных источника света: синий (столбец A) и жёлтый (столбец B). Используя SQL-шаблон, мы создадим новый зелёный свет (объединённый столбец):
Синий свет (💡🔵): Синий
Желтый свет (💡🟡): Желтый
SELECT AS
выступает в роли микшера света:
💡🔵 + 💡🟡: 💡✳️
Точно также, как синий и жёлтый свет порождают зелёный, два столбца объединяются в один при помощи SELECT AS
.
Борьба со сложными случаями
Если два столбца могут содержать NULL, примените IFNULL()
для гарантированной работы кода:
SELECT IFNULL(CONCAT(`col1`, ' ', `col2`), 'Default Value') AS `combined_col` FROM `table`;
Чтобы объединить дату и время в единый временной отпечаток, используйте такой подход:
SELECT CONCAT(`date_col`, ' ', `time_col`) AS `Timestamp` FROM `table`;
Объединение многоязычных данных требует внимательности к кодировке символов:
SELECT CONCAT(_utf8mb4'囍', ' ', `EnglishCol`) AS `combined_col` FROM `table`;
Полезные материалы
- MySQL :: MySQL 8.0 Справочник по функциям и операциям со строками — Официальная документация MySQL на функции работы со строками, включая
CONCAT
. - Функция CONCAT() в MySQL — урок по использованию функции
CONCAT()
в MySQL. - SQL Алиасы — руководство по использованию SQL алиасов с помощью ключевого слова
AS
. - CONCAT (Transact-SQL) – SQL Server | Microsoft Learn — сравнение функции
CONCAT()
в SQL Server и MySQL. - MySQL :: MySQL 8.0 Справочник по строковым литералам — Руководство по работе со строковыми литералами и специальными символами в MySQL.