如何从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是为了当你需要一个非天组件的情况下。