NULLIF
Сравнивает два значения и возвращает NULL, если они равны.
PostgreSQL 17.5
NULLIF(value_1, value_2)Параметры
- value_1
- Значение, которое возвращается, если аргументы не равны
- value_2
- Значение для сравнения с value_1
Возвращаемое значение
NULL, если аргументы равны, иначе value_1
Примеры
Одинаковые значения дают NULL
PostgreSQL 17.5
SELECT NULLIF('SQL Academy', 'SQL Academy');Защита от деления на ноль
PostgreSQL 17.5
SELECT 100 / NULLIF(0, 0) AS result;Пустые промокоды не считаются
PostgreSQL 17.5
SELECT COUNT(promo_code) AS not_null,
COUNT(NULLIF(promo_code, '')) AS filled
FROM orders;Страниц в минуту без деления на ноль
PostgreSQL 17.5
SELECT session_id,
pages_viewed,
duration_sec,
ROUND(pages_viewed * 60.0 / NULLIF(duration_sec, 0), 1) AS pages_per_minute
FROM sessions
ORDER BY duration_sec
LIMIT 5;Подробности
Два частых применения: защита от деления на ноль — x / NULLIF(y, 0) вернёт NULL вместо ошибки, и замена пустых строк на NULL — NULLIF(column, ''), чтобы их не считал COUNT и заменял COALESCE.