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