如何从mysql中的当前日期时间减去30天?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
答案 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()
省略了时间组件,因此potentially比now()
更快,而且更多&#34;语义正确&#34;如果您只对该日期感兴趣。
此外,subdate()
2-arity重载可能比使用interval
更快。
interval
适用于需要非日期组件的情况。