Частая мелочь в SQL — собрать одну строку из нескольких полей. Например, имя пользователя из
first_name, middle_initial, last_name.Таблица условно такая:
users(id, first_name, middle_initial, last_name)
Первое, что обычно пишут:
SELECT first_name || ' ' || middle_initial || ' ' || last_name
FROM users;
И тут важный момент: если хотя бы одно значение NULL, всё выражение тоже уйдёт в NULL.
То есть если
middle_initial = NULL, то результат будет не Emily Johnson, а просто NULL.В таких случаях удобнее использовать
CONCAT_WS:SELECT CONCAT_WS(' ', first_name, middle_initial, last_name)
FROM users;CONCAT_WS склеивает значения через разделитель и просто пропускает NULL.Если
middle_initial = 'A': Emily A Johnson. Если middle_initial = NULL: Emily Johnson.Плюс не нужно отдельно думать про лишние пробелы — разделитель вставится только там, где есть значение.
Важно:
CONCAT_WS пропускает именно NULL. Пустая строка не игнорируется.То же самое можно собрать и через
COALESCE, например так:SELECT
COALESCE(first_name || ' ', '') ||
COALESCE(middle_initial || ' ', '') ||
COALESCE(last_name, '')
FROM users;
Но это уже выглядит тяжелее, особенно когда полей больше двух-трёх.
🔥 Так что для таких кейсов
CONCAT_WS обычно самый нормальный вариант: и короче, и читается лучше.➡️ SQL Ready | #практика