如何从MySQL中的当前date时间减去30天?

我如何从MySQL中的当前date时间减去30天?

SELECT * FROM table WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW(); 
 SELECT * FROM table WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW(); 

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add

对于任何不想使用DATE_SUB ,请使用CURRENT_DATE

 SELECT CURRENT_DATE - INTERVAL 30 DAY 

不要使用NOW() ,因为查询caching或优化会丢失,因为查询每次都是不同的。 请参阅MySQL文档中不应该使用的函数列表。

在下面的代码中,让我们假设这张表随着时间而增长。 新的东西被添加,你想只显示在过去30天的东西。 这是最常见的情况。

请注意,date已被添加为一个string。 最好用这种方式添加date,从你的调用代码中,而不是使用NOW()函数,因为它会杀死你的caching。

 SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY); 

你可以使用BETWEEN如果你真的只想在这第二天到第二天的30天之前,但这不是我的经验常见的用例,所以我希望简化的查询可以为你服务。

你也可以使用

 select CURDATE()-INTERVAL 30 DAY 

MySQL从现在起减去几天:

 select now(), now() - interval 1 day 

打印:

 2014-10-08 09:00:56 2014-10-07 09:00:56 
 SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y') 

您可以通过在SQL中使用date格式进行格式化。

其他方式

 SELECT COUNT(*) FROM tbl_debug WHERE TO_DAYS(`when`) < TO_DAYS(NOW())-30 ; 

如果你只需要date而不是时间使用:

 select*from table where exec_datetime between subdate(curdate(), 30)and curdate(); 

由于curdate()省略了时间组件,因此它可能比now()更快,而在只对date感兴趣的情况下,它更“正确”。

此外, subdate()的2元重载可能比使用interval更快。 interval是为了当你需要一个非天组件的情况下。