CONCAT() в SQL — склейка строк, оператор || и CONCAT_WS

CONCAT() склеивает несколько строк в одну — например, имя и фамилию в полное ФИО или читаемую метку из нескольких полей. Аналитику это нужно постоянно: подписи для отчётов, ключи для JOIN, экспорт в CSV. Нюанс диалектов: в PostgreSQL и SQLite строки удобно склеивать оператором ||, а в MySQL || — это логическое ИЛИ, поэтому там пользуются только функцией CONCAT.

Синтаксис

CONCAT(строка1, строка2, …) -- или: строка1 || строка2

Примеры использования

Пример 1: ФИО из двух полей

SELECT
  CONCAT(first_name, ' ', last_name) AS full_name
FROM users
LIMIT 2;

Результат:

full_name
---------------
Анна Смирнова
Игорь Волков

Пример 2: Метка через оператор ||

SELECT
  'Заказ #' || order_id AS label
FROM orders
ORDER BY order_id
LIMIT 2;

Результат:

label
-----------
Заказ #1001
Заказ #1002

Пример 3: CONCAT_WS с разделителем

SELECT
  CONCAT_WS(', ', city, country) AS location
FROM users
LIMIT 2;

Результат:

location
-----------------
Москва, Россия
Алматы, Казахстан
Порешать SQL-задачи в тренажёре →

Типичная ошибка

Поведение с NULL различается: в MySQL CONCAT() вернёт NULL, если хотя бы один аргумент NULL, а в PostgreSQL и SQLite (3.44+) NULL просто пропускается как пустая строка. Оператор || в PostgreSQL/SQLite даёт NULL, если любой операнд NULL, поэтому оборачивайте поля в COALESCE(col, '').

Где спрашивают на собеседовании

На собесе спрашивают в контексте форматирования строк и сборки меток. Идёт в паре с COALESCE (защита от NULL) и CONCAT_WS для сборки CSV-подобных значений.

FAQ: частые вопросы про CONCAT

Чем CONCAT отличается от оператора ||?

|| — это оператор SQL-стандарта, работает в PostgreSQL и SQLite и возвращает NULL, если хоть один операнд NULL. CONCAT — функция, которая в Postgres/SQLite пропускает NULL. В MySQL || по умолчанию означает логическое ИЛИ, поэтому там для склейки нужен именно CONCAT.

Почему CONCAT вернул NULL?

Скорее всего вы в MySQL и один из аргументов оказался NULL — тогда весь результат NULL. Оберните проблемные колонки в COALESCE(col, ''), либо используйте CONCAT_WS, который игнорирует NULL-аргументы.

Работает ли CONCAT в SQLite?

Функция CONCAT() и CONCAT_WS() появились в SQLite только с версии 3.44 (конец 2023). На старых версиях используйте оператор ||. Для склейки с разделителем на старом SQLite придётся собирать строку вручную через ||.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Строковые функции · null-handling

Другие функции SQL

COALESCE · NULLIF · COUNT · SUBSTR · CAST · REPLACE

Открыть SQL-тренажёр (565 задач) →