如何减去30天从当前的日期时间在mysql?

如何从mysql中的当前日期时间减去30天?

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

< a href = " http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html function_date-add " > http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html function_date-add < / >

我们不要使用NOW(),因为每次查询都是不同的,这会丢失任何查询缓存或优化。查看MySQL文档中不应该使用的函数列表。

在下面的代码中,让我们假设这个表随着时间而增长。添加了新内容,您希望只显示过去30天的内容。这是最常见的情况。

注意,日期是作为字符串添加的。从调用代码中以这种方式添加日期比使用NOW()函数更好,因为它会杀死缓存。

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

你可以使用BETWEEN,如果你真的只是想要这一秒到30天前的东西,但在我的经验中,这不是一个常见的用例,所以我希望简化的查询可以很好地为你服务。

MySQL从现在开始减去天数:

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

打印:

2014-10-08 09:00:56     2014-10-07 09:00:56

其他间隔时间表达式单元参数:

https://dev.mysql.com/doc/refman/5.5/en/expressions.html#temporal-intervals

select now() - interval 1 microsecond
select now() - interval 1 second
select now() - interval 1 minute
select now() - interval 1 hour
select now() - interval 1 day
select now() - interval 1 week
select now() - interval 1 month
select now() - interval 1 year

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

SELECT CURRENT_DATE - INTERVAL 30 DAY

另一种方式

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

如果你只需要日期而不需要时间,可以使用:

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

由于curdate()省略了时间组件,所以它比now()更快,并且在你只对日期感兴趣的情况下更“语义正确”。

而且,subdate()的2-arity重载可能比使用interval更快。 interval意味着当你需要一个非日的组件时
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')

可以在SQL中使用日期格式进行格式化。

你也可以使用

select CURDATE()-INTERVAL 30 DAY