我正在尝试创建一个 MySQL 查询,该查询返回(col_a+col_b-col_c+col_d) != col_e
所有列所在的行decimal
,默认为null
. 我知道有一行满足这些要求,但是当我使用上述逻辑作为WHERE
子句运行查询时,该行没有出现。我注意到那col_c
是null
,而不是数值,并且在将其更改0
为行后,当我运行查询时出现了。
为什么会这样?我一直认为这null
被解释为0
上述情况?
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_d
(COALESCE
在这种情况下会同样工作)。
有关使用NULL
s 的更多信息:http: //dev.mysql.com/doc/refman/5.0/en/problems-with-null.html
内特,NULL 是 NULL。MySQL 不会自动为您进行类型转换。一种解决方法是将表的列 DEFAULT 更改为 0。或者在表达式中使用函数 IFNULL(col_c, 0)。
;-)
每当您进行数学计算时,其中一个或多个值可能是NULL
您需要在公式中使用数字恒等运算来考虑它,因为任何包含 a 的计算NULL
都将具有NULL
. 以下是一些常见的情况:
ifnull(col1,0)+ifnull(col2,0)
ifnull(col1,0)-ifnull(col2,0)
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))