2012-11-10 56 views
1

我运行此查询:与MySQL日期比较不正确的结果

SELECT COUNT(*) as num FROM items 
WHERE status='public' 
AND DATE(dateCreated) >= '01-01-2012' 
AND DATE(dateCreated) <= '31-12-2012' 

要获得所有在2012年加入的结果的项目数:629

但是如果我更改年至2011年,我得到完全相同的结果。

如果我完全删除日期比较,只是做:

SELECT COUNT(*) AS num 
FROM items 
WHERE STATUS = 'public' 

这也给了629行的结果,即使有项目从2009-2012表中添加了所有的方式,每年都应该给出不同的数字。

我在做什么错?

dateCreated列是日期时间列。

回答

1

如果列被声明为日期时间,那么可以使用日期的yyyy-MM-dd格式或日期时间的yyyy-MM-dd HH:mm:ss来比较日期。

SELECT COUNT(*) as num FROM items 
WHERE status='public' 
AND dateCreated >= '2012-01-01' 
AND dateCreated <= '2012-12-31' 

如果您使用DATE()函数和比较反对您的格式的日期,实际上是比较字符串按字母顺序,因此与格式DD-MM-YYYY任何日期将开始与1和3之间的数字。

+0

唉,谢谢。我不能相信我忘了那个。 –

1

试试这个查询,而不是:

SELECT COUNT(*) as num FROM items 
WHERE status='public' 
AND dateCreated >= '2012-01-01' 
AND dateCreated <= '2012-12-31' 

从MySQL的docs

DATETIME类型用于包含日期和时间部分的值。 MySQL检索并显示'YYYY-MM-DD HH:MM:SS'格式的DATETIME值