MySQL列比较时包含NULL值:如何用单条件实现?
解决MySQL中列比较时包含NULL行的问题
嘿,我懂你遇到的困扰了!在MySQL里,NULL是个特殊的值——它代表“未知”,所以当你用NEW_TIME > OLD_TIME这种条件做比较时,如果OLD_TIME是NULL,这个比较的结果既不是TRUE也不是FALSE,而是NULL。而WHERE子句只会保留结果为TRUE的行,所以那些OLD_TIME为NULL的行就被过滤掉了。
要同时获取这些NULL行,你可以试试下面两种实用方法:
方法一:直接添加NULL判断条件
把查询改成这样,明确把OLD_TIME为NULL的情况包含进来:
SELECT * FROM table WHERE (NEW_TIME > OLD_TIME) OR OLD_TIME IS NULL;
逻辑很直白:要么满足NEW_TIME大于OLD_TIME,要么OLD_TIME本身就是NULL,两种情况都会被选中。对应你给出的例子,那行OLD_TIME为NULL的数据就会被正常返回啦。
方法二:用IFNULL函数替换NULL值
如果你希望把NULL当成一个特定值来参与比较(比如一个极小的数),可以用IFNULL函数把OLD_TIME的NULL替换成一个肯定比NEW_TIME小的值,比如:
SELECT * FROM table WHERE NEW_TIME > IFNULL(OLD_TIME, 0);
这里IFNULL(OLD_TIME, 0)会把OLD_TIME的NULL替换成0,只要你的NEW_TIME值(比如你例子里的1522726409000)大于0,这行数据就会被选中。不过这个方法要结合你的实际业务场景来用,确保替换的值符合逻辑。
内容的提问来源于stack exchange,提问作者Arunkumar Muthuvel
相关产品推荐
相关产品推荐

