MySQL Days Subtraction在月末无效

时间:2014-07-01 01:01:00

标签: php mysql sql date

我有一个简单的系统来监控和绘制来自MySQL服务器的统计数据。这些服务是用PHP编写的,并返回JSON。 我们坚持的问题是,今天是2014年7月1日...过去7天图表和表格中的值变为零。日期计算逻辑在表输出中给出正确的日期。我试图手动调用服务并检查,实际上JSON中的值都是零。 本模块中的大多数查询都使用以下内容:

 $query_string = SELECT new_user_count AS new_user_count 
                 FROM kpi_summaries 
                 WHERE DATE(date) = CURDATE()-".$n." 
                 AND data_type=1";

在一个简单的循环中,我使用此查询字符串来获取每天最后7天的值。直到昨天这个工作都很完美(因为我猜测,从CURDATE减去的日期都在同一个月)。

另一种表达我怀疑的方法是:使用CURDATE()是不正确的 - 3如果3天前是上个月的日期?如果这是错的,那么正确的方法是什么?我是否需要使用DATE_SUB()或类似的东西..?

1 个答案:

答案 0 :(得分:3)

这是问题所在。 CURDATE() - 尽管有外观和逻辑 - 但不会返回date值。它返回一个字符串或数字。引用documentation

  

将当前日期作为一个值返回到' YYYY-MM-DD'或YYYYMMDD   格式,取决于函数是用于字符串还是   数字上下文。

正在发生的事情是上下文需要-的数字。所以,20140701 - 3是。 。 。 20140698.作为约会,这并不合理。它没有任何匹配。

通过添加interval,我们给编译器一个提示,CURDATE()应该是一个日期,并减去适当的天数。当然,使用诸如date_sub()之类的函数会产生相同的效果。