IFNULL 函数是 MySQL 控制流函数之一,它接受两个参数,如果不是 NULL,则返回第一个参数。 否则,IFNULL 函数返回第二个参数。两个参数可以是文字值或表达式。
IFNULL(v1,v2)
如果 v1 不为 NULL,则 IFNULL 函数返回 v1;
如果 v1 为 NULL,则返回 v2;
(1)验证 IFNULL 函数的第一个参数为 NULL 时,IFNULL 函数是如何进行处理的。如下:
mysql> select IFNULL(NULL, 'ARG2'); +----------------------+ | IFNULL(NULL, 'ARG2') | +----------------------+ | ARG2 | +----------------------+ 1 row in set (0.05 sec) mysql> select IFNULL('ARG1', 'ARG2'); +------------------------+ | IFNULL('ARG1', 'ARG2') | +------------------------+ | ARG1 | +------------------------+ 1 row in set (0.06 sec)
由运行结果可知,如果 IFNULL 函数的第一个参数为 NULL,将返回第二个参数。如果第一个参数和第二个参数均不为NULL,则返回第一个参数。
(2)使用 IF 函数将 t_user 表中 name 字段为 NULL 的字段返回 “-”,age 字段为 NULL 的字段返回 0。其中,t_user 表有如下数据:
mysql> select * from t_user; +----+------+-----+------+----------+ | id | name | sex | age | salary | +----+------+-----+------+----------+ | 1 | 张三 | 男 | 22 | 6782.50 | | 2 | 李四 | 男 | 27 | 7523.00 | | 3 | 王五 | 女 | 22 | 6760.30 | | 4 | 赵六 | 男 | 24 | 6810.50 | | 5 | 王二 | 男 | 27 | 10280.00 | | 6 | 杜一 | 女 | 25 | 8700.00 | | 7 | NULL | 女 | NULL | 9750.00 | +----+------+-----+------+----------+ 7 rows in set (0.06 sec)
通过 IFNULL 函数分别处理 name 和 age 字段,如果 name 字段为 NULL,则返回 “-”;如果 age 字段为 NULL,则返回 0。如下:
mysql> select id, IFNULL(name, '-') as name, sex, IFNULL(age, 0) as age,salary from t_user; +----+------+-----+-----+----------+ | id | name | sex | age | salary | +----+------+-----+-----+----------+ | 1 | 张三 | 男 | 22 | 6782.50 | | 2 | 李四 | 男 | 27 | 7523.00 | | 3 | 王五 | 女 | 22 | 6760.30 | | 4 | 赵六 | 男 | 24 | 6810.50 | | 5 | 王二 | 男 | 27 | 10280.00 | | 6 | 杜一 | 女 | 25 | 8700.00 | | 7 | - | 女 | 0 | 9750.00 | +----+------+-----+-----+----------+ 7 rows in set (0.07 sec)
由运行结果可知,id 为 7 的记录中,name 和 age 均为 NULL。
通过 IFNULL(name, '-') 判断,如果 name 为 NULL,则返回 “-”。否则,直接返回 name 字段的值。
通过 IFNULL(age, 0) 判断,如果 age 为 NULL,则返回 0。否则,直接返回 age 字段的值。