1+Null 居然等于 Null

    好吧,我OUT了。因为以前基本上是用php对数据结果的同一行进行计算,居然没注意sql语言中 select 1+Null 的结果会是Null, 好在测试细心发现了问题。本人看我的有关sql的书中都好像没有讲这一点,如果谁知道哪本书写了这点,希望能把书名告诉我下—— 《阿里 java开发手册有写》

 3. 【强制】当某一列的值全是 NULL 时,count(col)的返回结果为 0,但 sum(col)的返回结果为
NULL,因此使用 sum()时需注意 NPE 问题。
正例:可以使用如下方式来避免 sum 的 NPE 问题:SELECT IFNULL(SUM(column), 0) FROM table;

    关于IFNULL, 我已经给阿里 java开发手册提了建议   https://github.com/alibaba/p3c/issues/776

    关于SQL 在数值计算时对 NULL 的处理及解决办法,使用 COALESCE 函数就可以了(IFNULL不是sql标准, 只有实现mysql的数据库能用),复杂些的用sql的 if 或者 case when表达式。  

    当然, 比较好的办法是在设计数据库时防范于未然,把数值类型设置成不能为Null,并默认为0; 关联表时尽量写inner join,如果有left join之类的情况,就要注意空值的出现, 进行防御式的编程。

    我在写SQL时,要经常判断字符串类型是否是Null或'', 显然在插入数据时,如果是'',转成Null插入,也是可以避免的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值