В MySQL хранимые процедуры проверяют, является ли локальная переменная нулевой - PullRequest
2 голосов
/ 28 апреля 2009

В следующем примере хранимой процедуры

DECLARE Variable DOUBLE;
DECLARE Variable2 DOUBLE;
SELECT Something FROM Somewhere INTO Variable;

SELECT Something FROM SomewhereElse INTO Variable 2;

SELECT (Variable + Variable2);

Если либо Variable, либо Variable2 имеют значение NULL, то итоговый SELECT вернет значение NULL. Я хотел бы, чтобы, если они равны NULL, они были преобразованы в 0,00 до финального значения SELECT, как вы это сделаете? Я уже пытался добавить

SELECT 0.00 INTO Variable WHERE Variable IS NULL;

чуть выше окончательного выбора, но это не сработало.

Ответы [ 3 ]

5 голосов
/ 28 апреля 2009
SELECT COALESCE(variable, 0) + COALESCE(variable2, 0)
1 голос
/ 28 апреля 2009

, если вы хотите, чтобы каждая переменная была преобразована в ноль, используйте решение, опубликованное Quassnoi

SELECT COALESCE(variable, 0) + COALESCE(variable2, 0)

если вы хотите иметь 0, если любая переменная равна нулю, тогда используйте

SELECT COALESCE(variable + variable2, 0)
0 голосов
/ 28 апреля 2009

Quassnoi правильно, но еще проще (и немного быстрее) просто объединить результат:

 SELECT coalesce( Variable + Variable2, 0 );

Это работает, потому что почти для всех операторов любой нулевой операнд делает операцию нулевой:

   select 1 + null ; -- null
   select null + 1 ; -- null
   select null + null ; -- null

В выражении: SELECT coalesce( Variable + Variable2, 0 ); результат выражения сложения Variable + Variable2 равен coalesce первый аргумент; если это null, coalesce возвращает свой второй аргумент, 0, в противном случае он возвращает (не нулевое) значение своего первого аргумента, то есть сумму, которую мы хотим.

Те немногие операторы и функции, которые не возвращают ноль для нулевого операнда, предназначены для работы с нулями: coalesce, is null, is not null.

Как отмечает Кристоф ниже, значение выражения select отличается с помощью выражения Кассноя, если только одна переменная равна нулю: его будет возвращать значение ненулевой переменной, если единица равна нулю; мой вернет ноль, если либо переменная равна нулю. Что «правильно», зависит от ваших намерений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...