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

use*_*637 173 mysql

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

SELECT * FROM table
WHERE exec_datetime BETWEEN DATEDIFF(NOW() - 30 days) AND NOW();
Run Code Online (Sandbox Code Playgroud)

zer*_*kms 271

SELECT * FROM table
WHERE exec_datetime BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();
Run Code Online (Sandbox Code Playgroud)

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-add


Dou*_*Fir 110

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

SELECT CURRENT_DATE - INTERVAL 30 DAY
Run Code Online (Sandbox Code Playgroud)

  • 比使用"NOW() - INTERVAL 30 DAY"更可读但结果不同.由于问题提到"从当前的**日期时间减去30天**",它可能不是OP想要的. (7认同)
  • @ypercubeᵀᴹ 然后使用 `current_timestamp` 而不是 `current_date` (3认同)
  • 如果可以的话,我会给这个+10。SQL应该与可读性有关,这是最易读的方式。 (2认同)

Jos*_*ust 20

让我们不要使用,NOW()因为您丢失任何查询缓存或优化,因为每次查询都不同.请参阅MySQL文档中不应使用的函数列表.

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

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

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

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

  • 所以你建议不要使用`NOW()`并仍在你的答案中使用它.o_O PS:你的查询将返回另一个**结果,而不是OP可能想要的结果 (3认同)
  • @ user784637:嗯,`BETWEEN`和`> =`是不同的运算符,你知道吗?我的查询限制了"30天前和今天"的结果集,这是"30天前的所有内容".所以`明天`记录与我和你的原始查询不匹配,但是会匹配这个答案 (2认同)

Eri*_*ski 14

MySQL从现在开始减去天数:

select now(), now() - interval 1 day
Run Code Online (Sandbox Code Playgroud)

打印:

2014-10-08 09:00:56     2014-10-07 09:00:56
Run Code Online (Sandbox Code Playgroud)


小智 14

你也可以使用

select CURDATE()-INTERVAL 30 DAY
Run Code Online (Sandbox Code Playgroud)