3

我正在尝试创建一个 MySQL 查询,该查询返回(col_a+col_b-col_c+col_d) != col_e所有列所在的行decimal,默认为null. 我知道有一行满足这些要求,但是当我使用上述逻辑作为WHERE子句运行查询时,该行没有出现。我注意到那col_cnull,而不是数值,并且在将其更改0为行后,当我运行查询时出现了。

为什么会这样?我一直认为这null被解释为0上述情况?

4

3 回答 3

4

NULL(据我的解释)是不可代表的数据。null 的唯一适当测试是IS NULL,IS NOT NULL几个专门用于处理NULL值的函数:http: //dev.mysql.com/doc/refman/5.0/en/comparison-operators.html

你可以说- IFNULL(col_c, 0)+col_dCOALESCE在这种情况下会同样工作)。

有关使用NULLs 的更多信息:http: //dev.mysql.com/doc/refman/5.0/en/problems-with-null.html

于 2013-05-15T01:13:42.073 回答
2

内特,NULL 是 NULL。MySQL 不会自动为您进行类型转换。一种解决方法是将表的列 DEFAULT 更改为 0。或者在表达式中使用函数 IFNULL(col_c, 0)。

;-)

于 2013-05-15T01:14:15.407 回答
0

每当您进行数学计算时,其中一个或多个值可能是NULL您需要在公式中使用数字恒等运算来考虑它,因为任何包含 a 的计算NULL都将具有NULL. 以下是一些常见的情况:

加法或减法使用 0

ifnull(col1,0)+ifnull(col2,0)
ifnull(col1,0)-ifnull(col2,0)

乘法、除法、指数或模数使用 1

ifnull(col1,1)*ifnull(col2,1)
ifnull(col1,1)/ifnull(col2,1)
power(ifnull(col1,1),ifnull(col2,1))
mod(ifnull(col1,1),ifnull(col2,1))
于 2021-02-25T15:50:35.373 回答