2016-05-13 58 views
-3

我有两个查询。这些查询中没有错误只是结果是不同的。为什么不同的结果使用Mysql查询

查询1

SELECT * FROM notices 
WHERE CURDATE() < end_date 
OR end_date = NULL 
ORDER BY id 

查询中的一个的结果:

enter image description here

查询2

select * from notices 
where CURDATE() < end_date or end_date='0000-00-00' 
order by id 

结果查询两种:

enter image description here

表结构

enter image description here

问题

我的问题是,为什么查询1不显示与查询2相同的结果?

+1

从本质上讲,你问为什么是两个不同的查询产生不同的结果:)在第一个查询,你检查是否END_DATE为NULL具体而第二个检查如果END_DATE也等于'0000-00-00'。 –

+0

但是,当我插入我使用'NULL'结束日期然后它保存'0000-00-00'。所以根据这我说,在选择期间,为什么它不与'NULL'工作 –

+0

它现在听起来像end_date列在其定义中包含NOT NULL DEFAULT'0000-00-00'。这意味着,当一行被插入数据库时​​,如果'end_date'丢失,'0000-00-00'将被用于它的位置。请更新您的问题与您的表架构 –

回答

1

因为NULL是不一样的 “0000-00-00”

PD:如果您想设置一个where子句并选择字段为空,你应该使用 “WHERE END_DATE IS NULL”,而不是“WHERE end_date = NULL”

+0

如果它不相同,为什么它将NULL保存为'0000-00-00'? –

+0

@HamzaZafeer然后你可能会保存NULL错误,告诉我们该代码。或者查看这个例子http://sqlfiddle.com/#!9/4bf612/1 –

+0

您的end_date列不可为空。你的ORM或其他必须保存一个默认值而不是NULL – Borjante

0

从我的理解来看,NULL与Date类型的0000-00-00不同。有些开发人员使用0000-00-00作为默认值。由于NULL和0000-00-00都不相同,因此您会看到两个不同的结果集。

入住这default date '0000-00-00 00:00:00' or null

相关问题