warning:
这篇文章距离上次修改已过374天,其中的内容可能已经有所变动。
今天在写存储过程的时候踩了个小坑,这里记录一下
错误的判断
codeCREATE DEFINER=`PING`@`%` PROCEDURE `test`()
BEGIN
#错误的判断
if "344085057" != null then
select "344085057 != null";
else
select "null 不能直接用=和!=比较";
end if;
CASE null
WHEN null THEN
select "null = null";
ELSE
select 'null 不能直接用=和!=比较';
END CASE;
#错误的判断
END
输出null 不能直接用=和!=比较
null 不能直接用=和!=比较
正确的判断
方法一codeCREATE DEFINER=`PING`@`%` PROCEDURE `test`()
BEGIN
#正确的判断
if "344085057" is not null then
select "344085057 is not null";
else
select "null 比较 用is null和is not null";
end if;
CASE
WHEN null is null THEN
select "null is null";
ELSE
select 'null 比较 用is null和is not null';
END CASE;
#正确的判断
END
输出344085057 is not null
null is null
方法二codeCREATE DEFINER=`PING`@`%` PROCEDURE `test`()
BEGIN
#正确的判断
if "344085057" != ifnull(null,"") then
select "344085057 != null";
else
select "null 不能直接用=和!=比较";
end if;
CASE ifnull(null,"")
WHEN ifnull(null,"") THEN
select "null = null";
ELSE
select 'null 不能直接用=和!=比较';
END CASE;
#正确的判断
END
输出344085057 != null
null = null
null.png