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

时间:2012-05-26 01:47:36

标签: mysql

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

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

8 个答案:

答案 0 :(得分:246)

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

答案 1 :(得分:103)

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

SELECT CURRENT_DATE - INTERVAL 30 DAY

答案 2 :(得分:20)

由于查询每次都不同,因此您不会使用NOW(),因为您丢失了任何查询缓存或优化。请参阅MySQL documentation中不应使用的功能列表。

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

请注意,日期已添加为字符串。最好以这种方式从您的调用代码添加日期,而不是使用NOW()函数,因为它会终止您的缓存。

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

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

答案 3 :(得分:11)

您也可以使用

select CURDATE()-INTERVAL 30 DAY

答案 4 :(得分:9)

MySQL从现在开始减去天数:

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

打印:

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

答案 5 :(得分:1)

SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')

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

答案 6 :(得分:0)

另一种方式

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

答案 7 :(得分:0)

如果您只需要使用日期而不是时间:

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

由于curdate()省略了时间组件,因此potentiallynow()更快,而且更多&#34;语义正确&#34;如果您只对该日期感兴趣。

此外,subdate() 2-arity重载可能比使用interval更快。 interval适用于需要非日期组件的情况。