


COALESCE возвращает первый аргумент, который не равен NULL. Пустая строка и число 0 при этом остаются обычными значениями. В разборе Mentoring.digital покажем, как подготовить подпись для отчёта, сохранив смысл исходных данных.
SELECT COALESCE(NULL::text, 'Без имени');
-- Без имени
SELECT COALESCE(''::text, 'Без имени');
-- пустая строка
SELECT COALESCE(0, 100);
-- 0
Первый запрос использует запасную подпись. Второй до неё не доходит, потому что пустая строка не является NULL. Третий сохраняет ноль: у COALESCE нет правила «заменить всё ложное или пустое».
Сначала договоритесь о смысле данных. Неизвестное количество и подтверждённое нулевое количество могут означать разные ситуации. Замена NULL на 0 в отчёте допустима только тогда, когда соответствует требованиям.
NULLIF возвращает NULL, когда два аргумента равны. Его можно поставить перед COALESCE, если пустая строка должна приводить к запасной подписи.
WITH sample(label, quantity) AS (
VALUES
(NULL::text, NULL::integer),
(''::text, 0),
('Ada'::text, 3)
)
SELECT
COALESCE(NULLIF(label, ''), 'Без имени') AS display_label,
COALESCE(quantity, 0) AS display_quantity
FROM sample;
Ожидаемые пары в учебном наборе: «Без имени, 0», «Без имени, 0» и «Ada, 3». Исходные данные не обновляются: выражения SELECT формируют результат выборки.
Строка из пробелов не равна пустой строке. Нужно ли предварительно убирать пробелы, определяется правилами конкретного поля. Не нормализуйте данные молча, если пробелы могут быть значимы.
Аргументы COALESCE должны приводиться к общему типу. Если поле числовое, произвольная текстовая подпись вместо числа может вызвать ошибку приведения. Для отображения текста готовят отдельное выражение и явно решают, как преобразовать число.
Если все аргументы равны NULL, результат тоже будет NULL. Добавление ещё одного источника не гарантирует заполненный результат, если у него нет обязательного значения.
Задание: сделайте подпись контакта из display_name, username и запасного текста. Проверьте оба NULL, пустое имя при существующем username и строку из пробелов. Объясните, какие значения нужно оборачивать в NULLIF.
Задачу можно включить в обучение SQL на практических запросах. Смысл NULL в ваших отчётах поможет разобрать наставник по SQL.