为什么 select IF(null <> 1,"true","false")
返回 false? null 不是 1?!
答案 0 :(得分:3)
NULL
不能用 =
或 <>
测试。根据定义,此类测试总是失败。
相反,要测试列 col
是否为空,请酌情使用以下方法之一:
col IS NULL
col IS NOT NULL
还有<=>
,但详细阅读手册。更改为此可能是“正确的”(但我不确定):
IF(null <=> 1, "false", "true")
如果“null”来自应用代码,请考虑其中一种(或许多其他可能性)将 NULL
转换为可以比较的内容:
IFNULL(?, 0)
COALESCE(?, 0)
要考虑的另一件事
IF(<<some test>>, true, false)
可以简单地替换为测试。
但如果您确实需要字符串 "true"
和 "false"
,那么此提示不适用。
这些理解 NULL:<=>、IFNULL()、COALESE()、IS NULL、IS NOT NULL、COUNT(col)(当 col 为 NULL 时不计算行)、LEFT JOIN(通过生成 NULL)、等
这些不理解NULL,只返回NULL:+、-、*、/、<、>等