Как стать автором
Поиск
Написать публикацию
Обновить

Особенности оператора IF в SQL (

Преамбула


Практически все языки программирования предоставляют возможность использовать условные операторы. SQL не исключение, однако, сам лично столкнулся с парочкой особенностей, на осознание которых пришлось убить несколько часов. Ниже рассмотрим одну из них. Думаю, кому-то эта статья может сэкономить драгоценное время.

Проблема: условие на наличие переменной


Во всех языках, с которыми раньше сталкивался, везде выражение «if(var)», если «var» существует, выдаёт «1», в противном случае «0». В MySQL же всё работает в лучшем случае наоборот, в худшем же, по совсем невнятной логике.

Так код, вопреки ожидаемому «if», выдаёт «else».
-- пример с ошибкой #1
begin
	SET @var='hi';
	IF(@var) THEN SELECT 'if';
	ELSE SELECT 'else';
	END IF;
end

Результат: «else».

Если же "IF(@var)" заменить на "IF(!@var)", то действует опять-таки по своей странной логике, выдавая «if»:
-- пример с ошибкой #2
begin
	SET @var='hi';
	IF(!@var) THEN SELECT 'if';
	ELSE SELECT 'else';
	END IF;
end

Результат: «if».

Решение


Условие на наличие переменной должно выглядеть так: "IF(@var IS NULL)" или "IF(@var IS NOT NULL)". Краткая запись, приведённая выше, в SQL не работает.
-- Верный пример #1
begin
	SET @var='hi';
	IF(@var IS NOT NULL) THEN SELECT 'if';
	ELSE SELECT 'else';
	END IF;
end

Результат: «if».

-- Верный пример #2
begin
	SET @var='hi';
	IF(@var IS NULL) THEN SELECT 'if';
	ELSE SELECT 'else';
	END IF;
end

Результат: «else».

Вывод: проверяем наличие переменной только с помощью «is null» или «is not null». Любой иной подход будет работать криво.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.