前置:本人测试使用的系统为windows,MySQL版本为5.7+,以下结果可能会受到影响,这里提前说明下。
表结构:
CREATE TABLE `ifnull_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `money1` decimal(10,2) DEFAULT NULL, `money2` decimal(10,2) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
表数据:
id | money1 | money2 |
1 | 10.00 | (Null) |
2 | (Null) | -100.00 |
3 | 150.00 | 10.00 |
假设我要查询money1大于money2的,并且要把差值计算出来。SQL如下:
SELECT ( money1 - money2 ) AS money,money1,money2 FROM ifnull_test WHERE money1 > money2
但当表中数据存在null的情况下,不管是比较还是计算都会出问题,上面SQL的运行结果为:
money | money1 | money2 |
140.00 | 150.00 | 10.00 |
比我们预想的要差很多,按照我们的思维,表中的三条数据都是应该出现在结果中,这就需要用到IFNULL这个SQL函数了:
-- IFNULL() 函数用于判断第一个表达式是否为 NULL,如果为 NULL 则返回第二个参数的值,如果不为 NULL 则返回第一个参数的值。 IFNULL(expression, alt_value)
这时我们就可以加上这个函数完善上面的查询语句:
SELECT ( IFNULL(money1,0) - IFNULL(money2,0) ) AS money,money1,money2 FROM ifnull_test WHERE IFNULL(money1,0) > IFNULL(money2,0)
查询结果:
money | money1 | money2 |
10.00 | 10.00 | (Null) |
100.00 | (Null) | -100.00 |
140.00 | 150.00 | 10.00 |
end!
如果帮助到你,请赏杯奶茶喝~
- 本文链接: https://www.shx1024.top//index/article/details/article_id/78.shtml
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。