MySQL函数

  MySQL 的逻辑表达式为真,返回1,为假,返回0;1代表true,0代表false;

  -- IF(expr1[bool类型], expr2, expr3)

    如果 expr1 的值为 true(不为 0 或 null),则返回 expr2,否则返回 expr3。类似于 Java 的三元运算符,oracle 的 NVL2 函数。 

SELECT IF(0, 1, 2);SELECT IF(null, 1, 2);SELECT IF(1 / 0, 1, 2);
--> 2;--> 2;--> 2;

 

  -- IFNULL(expr1[bool类型], expr2)

  如果 expr1 的值为不为 null,则返回 expr1,否则返回 expr2。IFNULL()的返回值是数字或字符串,具体情况取决于所用的语境。

SELECT IFNULL(2 > 1, 5);SELECT IFNULL(0 > 1, 5);SELECT IFNULL(1 / 0, 5);
--> 1;--> 0;--> 5.0000;
SELECT IFNULL(0, 5);SELECT IFNULL(null, 5);SELECT IFNULL(1 / 0, ‘5‘);
--> 0;--> 5; --> 5;

  

  -- NULLIF(expr1[bool类型], expr2)

    如果 expr1 = expr2 则返回 null,否则返回 expr1。这和 CASE WHEN expr1 = expr2 THEN null ELSE expr1 END。

    此方法不能判断 null 值!

SELECT NULLIF(10, null);SELECT NULLIF(1/0, 5);SELECT NULLIF(1/0, null);
--> 10;--> null;--> null;

  

  -- ISNULL(expr[bool类型])

  如果 expr 的值为 null 则返回 1,否则返回 0。

SELECT ISNULL(1);SELECT ISNULL(0);SELECT ISNULL(null);SELECT ISNULL(1/0);
--> 0;--> 0;--> 1;--> 1;

在 Select 之后通过处理查询出来的 NULL 值,IF()、IFNULL()、NULLIF()、ISNULL() 是不识别的!!!
上述方法只能处理 Table 中的 null 值,即判断某条记录中的某字段是否为 null,无法对不存在的记录进行 null 判断 !!!
解决:在 Select 外再套一层 Select 处理,将内层的 Select 结果作为虚拟表 

相关推荐