1

我正在运行这个查询:

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 列是一个日期时间列。

4

2 回答 2

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 之间的数字开头。

于 2012-11-10T23:06:48.910 回答
1

试试这个查询:

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

来自 MySQL文档

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

于 2012-11-10T23:08:24.373 回答