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

时间:2013-03-05 11:42:26

标签: mysql datetime

我想知道每天创建的用户数,按日期分组,最后5/10/15天。

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

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

为什么?这是怎么回事?

顺便说一句,其他任何一张桌子也是如此。

编辑:

select curdate(), curdate() -5, curdate() - 15, curdate() + 1, curdate() + 0;

给出以下结果:     3/5/2013 12:00:00 AM 20130300 20130290 20130306 20130305

我不明白这是如何计算的。当CURDATE()+ 1给出明天日期时,CURDATE() - 5给我一个我无法解码的值。

1 个答案:

答案 0 :(得分:1)

尝试使用以下内容:

CURDATE() - INTERVAL 5 DAY