Datetime DATE DIFF无法按预期工作

时间:2011-10-19 13:27:33

标签: mysql

我有一个date_confirmed字段datetime

所以内容的一个例子是

  

2011-01-03 20:54:41

我根据date_confirmed从此表中提取最近行而构建的where子句如下...

WHERE DATEDIFF(g.date_confirmed, CURDATE()) <= 28

我在PHP中使用PHP,我想只提取date_confirmed中的日期少于28天的行。

有人可以帮助我/指出我更好的方向吗?

感谢。

3 个答案:

答案 0 :(得分:2)

嗯,你没有说什么不起作用,但我认为你可能打算改变参数:

WHERE DATEDIFF(CURDATE(), g.date_confirmed) <= 28

就像你拥有它一样,CURDATE()会(我假设)总是比g.date_confirmed更新,因此DATEDIFF()会返回一个负数 - 因此总是{{1} }

答案 1 :(得分:0)

我想你会改成:

WHERE DATEDIFF(g.date_confirmed, CURDATE()) <= -28

根据此处的文档(http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_datediff),如果第二个参数比第一个参数更新,结果数字将为负数。由于我假设当前日期比你的存储日期更新,我猜这就是这里发生的事情。

答案 2 :(得分:0)

我总是觉得把它写成

更清楚
WHERE g.date_confirmed >= DATE_SUB( CURDATE(), INTERVAL 28 DAY )

...特别是在我的记录可能有多个日期列的情况下,我认为这使我更清楚地比较了哪个日期字段。