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