1+Null 居然等于 Null

本文介绍了SQL中处理NULL值的方法,包括使用IFNULL和COALESCE函数来避免NPE问题,以及通过设置列属性防止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插入,也是可以避免的。

08-14
在编程中,`null` 表示一个空值或未定义的状态,具体的行为取决于编程语言或环境。以下是一些常见编程语言中对 `null + 1` 的处理方式: ### JavaScript 在 JavaScript 中,`null` 会被隐式转换为 `0`,因此 `null + 1` 的结果是 `1`。这种行为是由于 JavaScript 的类型转换机制,它会将 `null` 转换为数字类型进行运算。 ```javascript console.log(null + 1); // 输出 1 ``` ### SQLSQL 中,如果对 `NULL` 值进行加法运算,结果仍然是 `NULL`。这是因为 `NULL` 在 SQL 中表示未知值,任何与未知值的运算结果也是未知的。 ```sql SELECT 1 + NULL; -- 结果为 NULL ``` ### PHP 在 PHP 中,`null` 值会被转换为 `0` 进行加法运算,因此 `null + 1` 的结果是 `1`。 ```php var_dump(null + 1); // 输出 int(1) ``` ### JavaJava 中,直接对 `null` 进行加法运算是不允许的,因为 `null` 不是一个数字类型。如果尝试对一个 `Integer` 类型的 `null` 变量进行加法运算,会抛出 `NullPointerException`。 ```java Integer value = null; int result = value + 1; // 抛出 NullPointerException ``` ### Python 在 Python 中,尝试对 `None`(相当于 `null`)进行加法运算会导致 `TypeError`,因为 `None` 不是一个数字类型。 ```python value = None result = value + 1 # 抛出 TypeError ``` ### 总结 不同的编程语言对 `null` 值的处理方式各不相同。有些语言(如 JavaScript 和 PHP)会将 `null` 隐式转换为 `0`,而其他语言(如 SQLJava 和 Python)则会抛出错误或返回 `NULL`。理解每种语言的具体行为对于避免意外结果非常重要。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值