Mysql &引用;空";在数学计算中?

Mysql &引用;空";在数学计算中?,mysql,null,Mysql,Null,我正在尝试创建一个MySQL查询,返回(col_a+col_b-col_c+col_d)!=列,其中所有列均为decimal,默认为null。据我所知,有一行符合这些要求,但当我使用上述逻辑作为WHERE子句运行查询时,该行没有显示出来。我注意到col_c是null,而不是一个数值,在将其更改为0后,当我运行查询时会显示该行 为什么会这样?我一直认为在上述情况下,null被解释为0,null(就我的解释而言)是不可表示的数据。唯一适用于null的测试是和专门用于处理null值的几个函数: 您可以

我正在尝试创建一个MySQL查询,返回
(col_a+col_b-col_c+col_d)!=列
,其中所有列均为
decimal
,默认为
null
。据我所知,有一行符合这些要求,但当我使用上述逻辑作为
WHERE
子句运行查询时,该行没有显示出来。我注意到
col_c
null
,而不是一个数值,在将其更改为
0
后,当我运行查询时会显示该行

为什么会这样?我一直认为在上述情况下,
null
被解释为
0
null
(就我的解释而言)是不可表示的数据。唯一适用于null的测试是和专门用于处理
null
值的几个函数:

您可以说
-IFNULL(col_c,0)+col_d
COALESCE
在本例中的作用相同)


有关使用
NULL
s的详细信息:

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


;-)

当您进行一个或多个值可能为
NULL
的数学计算时,您需要使用数字标识操作在公式中对其进行说明,因为任何包含
NULL
的计算将产生
NULL
的结果。以下是一些常见的情况:

加减法使用0 乘法、除法、指数或模使用1
空!=0事实上是空的!=无效的使用
coalesce()
确保在计算之前将空值设置为零。不完全正确。既不是
NULL=0
也不是
NULL!=0
为真;类似地,无论是
NULL=NULL
还是
NULL!=NULL
为空。(SQL使用三值逻辑,并非所有表达式都是真或假。)谢谢,我没有意识到这一点。在PHP中,
1+null==1
是真的,但我只是在MySQL中运行了一个查询来检查这一点,正如您所说的,这不是真的。@ExplosionPills
IFNULL
ISNULL
之间有什么区别吗?@retailcoder
ISNULL
返回0或1
IFNULL
返回第一个参数,如果它不为null,则返回第二个参数。我的意思是
ISNULL
为null
-我一直在使用
IFNULL
的方式来回答问题,因为它确实会返回第一个参数,如果它不为null,则返回第二个参数,如果它为。。。至少在SQL Server中。我会做一些调查,但我想一美元四个25美分。找到了!-我没有注意到
mysql
标记,结果发现mysql没有
ISNULL
函数。
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))