mysql日期比较结果不正确

时间:2012-11-10 23:05:02

标签: mysql database

我正在运行此查询:

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'

即使在表格中从2009 - 2012年开始一直添加了项目,也会给出629行,并且每年应该给出不同的计数。

我做错了什么?

dateCreated列是日期时间列。

2 个答案:

答案 0 :(得分: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之间的数字开头。

答案 1 :(得分: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值