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 结果作为虚拟表 

 

posted @ 2020-02-15 13:52  oumae  阅读(203)  评论(0编辑  收藏  举报