今天在写存储过程的时候踩了个小坑,这里记录一下

错误的判断

code

CREATE 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 不能直接用=和!=比较

正确的判断

方法一code

CREATE 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

方法二code

CREATE 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


本文由 吾爱 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论