如何从mysql中的当前日期时间中减去30天?如何从mysql中的当前日期时间减去30天?
SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
如何从mysql中的当前日期时间中减去30天?如何从mysql中的当前日期时间减去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
让为你失去任何查询缓存或优化,因为查询每次都是不同的不使用NOW()
。请参阅MySQL documentation中不应使用的功能列表。
在下面的代码中,我们假设这张表随着时间而增长。新的东西被添加,你想显示在过去30天的东西。这是最常见的情况。
请注意日期已添加为字符串。最好从你的调用代码中以这种方式添加日期,而不是使用NOW()
函数,因为它会杀死缓存。
SELECT * FROM table WHERE exec_datetime >= DATE_SUB('2012-06-12', INTERVAL 30 DAY);
您可以使用BETWEEN
,如果你真的只是想的东西就在这个第二个30天在此之前很第二,但是这不是一个常见的情况在我的经验,所以我希望简化查询可以为你服务好。
所以你建议不要使用'NOW()'并且仍然在你的答案中使用它。 o_O PS:您的查询将返回**另一个**结果,而不是OP可能想要的结果 – zerkms
@zerkms此查询如何产生与查询不同的结果集? – user784637
@ user784637:uhm,'BETWEEN'和'> ='是不同的操作符,你知道吗?我的查询限制了“30天前和今天”的结果集,这是“30天前后的所有内容”。所以'明天'记录不匹配我的和你原来的查询,但会匹配这个答案 – zerkms
的MySQL减去从现在天:
select now(), now() - interval 1 day
打印:
2014-10-08 09:00:56 2014-10-07 09:00:56
为了谁不希望使用DATE_SUB
,使用CURRENT_DATE
:
SELECT CURRENT_DATE - INTERVAL 30 DAY
如果可以的话,我会给这个+10。 SQL应该都是关于可读性的,并且这是执行此操作最可读的方式。 –
比使用NOW() - INTERVAL 30 DAY更具可读性但不同的结果。由于问题提到“从当前**日期时间减去30天**”,这可能不是OP想要的。 –
另一方式
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()
更快potentially并在那里你只能是案件多“语义正确”对日期感兴趣。
另外,subdate()
的2值过载可能比使用interval
更快。 interval
适用于您需要非日间组件的情况。
所以,你声称'subdate(curdate(),30)'比'CURRENT_DATE - INTERVAL 30 DAY'要糟吗?你有证据吗?那会有多快?几微秒? –
@ypercube,哇,这个评论如何得到+5票,一天...你做了什么?另外,我在帖子中澄清说它“可能更快”。 – Pacerier
我不知道。我当然不能赞成我自己的评论。关于“潜在”更快的主张,我仍然看不到任何证据,决定性或间接性。即使速度稍快,条件也会被评估一次。除非您每分钟运行查询数百万次,否则差异将无关紧要。 –
SELECT date_format(current_date - INTERVAL 50 DAY,'%d-%b-%Y')
您可以通过在SQL中使用日期格式进行格式化。
您还可以使用
select CURDATE()-INTERVAL 30 DAY
真棒!谢谢 – deFreitas