我正在运行此查询:
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列是日期时间列。
答案 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值