Mybatis-MySQL 中使用IFNULL(p1,p2)函数
但是有一些需要注意的地方.
假设数据
title: student
id | name | age |
---|---|---|
1 | Ann | 18 |
2 | Bom | 19 |
3 | Hehe |
SELECT name,age FROM student WHERE id = 3;
此时查询结果就是
name | age |
---|---|
hehe |
使用IFNULL公式
SELECT name, IFNULL(age,0) FROM student WHERE id = 3;
此时查询结果就是
name | age |
---|---|
hehe | 0 |
也就是说, 使用IFNULL时, 如果IFNULL(p1,p2), 如果查询得到p1是null, 那么该字段就会被赋值为p2
注意事项
IFNULL只能对部分字段进行替换, 而如果整个结果时空, 那么IFNULL不起作用
SELECT name,age FROM student WHERE id = 4;
此时查询得到的整条数据都为null
那么此时 SELECT name, IFNULL(age,0) FROM student WHERE id = 4; 失效,依然得到一个空记录
配合Mybatis使用
假设目前有表格param, 有字段是param_name,表示该param的英文名, 有个param_chs_name字段表示该param的中文名,当中文名不存在的时候, 则返回其英文名字段,中文名字段可能不为null, 但可能是空字符串
SELECT param_name,(CASE WHEN IFNULL(trim(param_chs_name),'') = '' THEN param_name ELSE param_chs_name END) AS param_chs_name from param;
CASE WHEN 条件 THEN 结果1 ELSE 结果2 END
是mybatis常用的条件替换
另外还可以使用IF函数
SELECT param_name,(IF(IFNULL(trim(param_chs_name),'') = '' , param_name , param_chs_name )) AS param_chs_name from param;
能起到同样的效果!
IF(条件,结果1,结果2);