奇怪的MySQL CURDATE()行为(可能受CAST影响?)

奇怪的MySQL CURDATE()行为(可能受CAST影响?),mysql,datetime,Mysql,Datetime,我想知道过去5/10/15天每天创建的用户数量,按日期分组 以下是我过去5天用于datewise注册的查询: SELECT CAST(created AS DATE) as DateField , count(email) as Num FROM invited_users where created > curdate()-5 GROUP BY CAST(created AS DATE); // "created" is a datetime field // returns 5

我想知道过去5/10/15天每天创建的用户数量,按日期分组

以下是我过去5天用于datewise注册的查询:

SELECT CAST(created AS DATE) as DateField , count(email) as Num 
FROM invited_users where created > curdate()-5 
GROUP BY CAST(created AS DATE);

// "created" is a datetime field
// returns 5 rows
这正是我所期望的

但是,当我将数字“5”改为“10”或15(或者在我看来是5以外的任何数字)时,它就不起作用了!相反,它返回数据库中的所有日期

SELECT CAST(created AS DATE) as DateField , count(email) as Num 
FROM invited_users where created > curdate()-15 
GROUP BY CAST(created AS DATE);

// returns 97 rows
为什么?!这是怎么回事

顺便说一句,任何其他表也会发生同样的情况

编辑:

给出以下结果: 2013年3月5日12:00:00上午20130300 20130290 20130306 20130305


我不明白这是怎么计算出来的。CURDATE()+1表示明天的日期,CURDATE()-5表示我无法解码的值。

请尝试使用以下方法:

CURDATE() - INTERVAL 5 DAY

MySQL不支持这种日期算法。为此,您需要使用
date\u add()
(或
date\u sub()
CURDATE() - INTERVAL 5 DAY