在MySQL存储过程中,检查局部变量是否为null

在MySQL存储过程中,检查局部变量是否为null,mysql,stored-procedures,Mysql,Stored Procedures,使用以下示例存储过程 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,那么最终选择将返回NULL,我希望的是,如果它们为NUL

使用以下示例存储过程

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,那么最终选择将返回NULL,我希望的是,如果它们为NULL,则应在最终选择之前将其转换为0.00,您如何做到这一点?我已经试着添加了

SELECT 0.00 INTO Variable WHERE Variable IS NULL;

就在最终选择的上方,但这不起作用

Quassnoi是正确的,但是合并结果更简单(更快):

SELECT COALESCE(variable, 0) + COALESCE(variable2, 0)
 SELECT coalesce( Variable + Variable2, 0 );
这是因为对于几乎所有运算符,任何空操作数都会使操作为空:

   select 1 + null ; -- null
   select null + 1 ; -- null
   select null + null ; -- null
在表达式中:
选择coalesce(Variable+Variable2,0)
加法表达式
Variable+Variable2
的结果是
coalesce
第一个参数;如果为null,则coalesce将返回其第二个参数
0
,否则它将返回其第一个参数的(非null)值,这是我们想要的总和

少数不为空操作数返回null的运算符和函数是设计用于处理null的:
合并
为null
不为null


正如kristof在下面指出的那样,
select
表达式的值与使用Quassnoi的表达式时不同,如果只有一个变量为空:如果有一个变量为空,his将返回非空变量的值;如果任一变量为空,则我的将返回零。哪个“正确”取决于您的意图。

如果您希望将每个变量null转换为0,请使用Quassnoi发布的解决方案

SELECT COALESCE(variable, 0) + COALESCE(variable2, 0)
如果希望在任一变量为null时使用0,则使用

SELECT COALESCE(variable + variable2, 0)

这两个解决方案并不相同,Quassnoi的意思是,如果只有一个变量为null,那么结果就是另一个变量,这就是我想要的行为。