MySQL-ISNULL()、IFNULL()和NULLIF()函数

时间:2022-09-23 23:52:06

以下三个函数都可以用于where子条件,作为数据删除、更新的记录定位依据。

如:

SELECT * FROM usergrade WHERE ISNULL(USERNAME);

 

 

一、ISNULL(expr)

如果expr为null,那么isnull()的返回值为1,否则返回值为0。

mysql> select isnull(1/0) as result;
+--------+
| result |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

mysql> select isnull(0/1) as result;
+--------+
| result |
+--------+
|      0 |
+--------+
1 row in set (0.00 sec)

使用=的null值对比通常是错误的。 

isnull()函数同is null比较操作符具有一些相同的特性。请参见有关is null 的说明。

 

二、IFNULL(expr1,expr2)

假如expr1不为NULL,不管expr2的值是否为NULL,IFNULL()的返回值为expr1;否则其返回值为expr2。

IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

mysql> SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
|           1 |
+-------------+
1 row in set (0.01 sec)

mysql> SELECT IFNULL(NULL,10); 
+-----------------+
| IFNULL(NULL,10) |
+-----------------+
|              10 |
+-----------------+
1 row in set (0.00 sec)

mysql> SELECT IFNULL(1/0,10);  
+----------------+
| IFNULL(1/0,10) |
+----------------+
|        10.0000 |
+----------------+
1 row in set (0.00 sec)

mysql> SELECT IFNULL(1/0,'yes'); 
+-------------------+
| IFNULL(1/0,'yes') |
+-------------------+
| yes               |
+-------------------+
1 row in set (0.00 sec)

mysql> SELECT IFNULL(1,'yes'); 
+-----------------+
| IFNULL(1,'yes') |
+-----------------+
| 1               |
+-----------------+
1 row in set (0.00 sec)

 

三、NULLIF(expr)

如果expr1=expr2成立,那么返回值为NULL,否则返回值为expr1。

mysql> select nullif(1,1);
+-------------+
| nullif(1,1) |
+-------------+
|        NULL |
+-------------+
1 row in set (0.00 sec)

mysql> select nullif('a',1);
+---------------+
| nullif('a',1) |
+---------------+
| a             |
+---------------+
1 row in set, 1 warning (0.00 sec)