NULLIF
Сравнивает два значения и возвращает NULL, если они равны.
MySQL 8.1
NULLIF(value_1, value_2)Параметры
- value_1
- Значение, которое возвращается, если аргументы не равны
- value_2
- Значение для сравнения с value_1
Возвращаемое значение
NULL, если аргументы равны, иначе value_1
Примеры
Одинаковые значения дают NULL
MySQL 8.1
SELECT NULLIF('SQL Academy', 'SQL Academy');Разные значения дают первое
MySQL 8.1
SELECT NULLIF('SQL', 'Academy');Пустые промокоды не считаются
MySQL 8.1
SELECT COUNT(promo_code) AS filled,
COUNT(NULLIF(TRIM(promo_code), '')) AS with_code
FROM orders;Деление без деления на ноль
MySQL 8.1
SELECT session_id,
pages_viewed,
duration_sec,
ROUND(pages_viewed * 60 / NULLIF(duration_sec, 0), 1) AS pages_per_minute
FROM sessions
WHERE duration_sec < 20
ORDER BY session_id
LIMIT 5;Подробности
NULLIF(a, b) — короткая запись CASE WHEN a = b THEN NULL ELSE a END. Чаще всего её используют, чтобы превратить «пустое» значение в NULL: тогда его пропустят COUNT, AVG и COALESCE.
Вторая частая задача — деление: x / NULLIF(y, 0) вернёт NULL вместо деления на ноль. В MySQL деление на 0 и так даёт NULL, а в PostgreSQL — ошибку, поэтому запись с NULLIF работает одинаково в обеих СУБД.