Справочник по функциям

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');
NULLIF('SQL Academy', 'SQL Academy')
<NULL>

Разные значения дают первое

MySQL 8.1
SELECT NULLIF('SQL', 'Academy');
NULLIF('SQL', 'Academy')
SQL

Пустые промокоды не считаются

MySQL 8.1
SELECT COUNT(promo_code) AS filled,
	COUNT(NULLIF(TRIM(promo_code), '')) AS with_code
FROM orders;
filledwith_code
297177

Деление без деления на ноль

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;
session_idpages_viewedduration_secpages_per_minute
s_000015100<NULL>
s_000071169106.7
s_000134110<NULL>
s_00016340<NULL>
s_0002053199.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 работает одинаково в обеих СУБД.

Смотрите также

Где изучить