MySQL从上个月select所有的行,直到(now() – 1个月),用于比较目的

我需要一些帮助来写一个MySQL查询来显示我从上个月的行,但不是整个月,只有一直到现在()的同一天,小时和分钟,但在1个月前。

因此,例如,如果今天是5:19,那么我需要从午夜12:00 am 4/1到下午5:25 pm(当然也是同一年)select行。

谢谢!

通过计算前一个月的last_day并添加一天,您可以得到本月的第一个月。 这是尴尬的,但我认为它比格式化date作为string,并使用它进行计算。

select * from yourtable t where /* Greater or equal to the start of last month */ t.date >= DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY) and /* Smaller or equal than one month ago */ t.date <= DATE_SUB(NOW(), INTERVAL 1 MONTH) 

通过一个MySQL函数获取一个月前的数据很容易:

 SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH); 

要么

 SELECT NOW() - INTERVAL 1 MONTH; 

在我的头顶,我想不出有一个高雅的方法来在MySQL上个月的第一天,但​​这肯定会起作用:

 SELECT CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01'); 

把它们放在一起,你会得到一个解决你的问题的查询:

 SELECT * FROM your_table WHERE t >= CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01') AND t <= NOW() - INTERVAL 1 MONTH 

简单的代码请检查

 select * from table_name where created <= (NOW() - INTERVAL 1 MONTH) 

这是一个与你的问题相关的MySQLdate操作的例子:

 SELECT DATE_ADD( now( ) , INTERVAL -1 MONTH ) 

以上将返回一个月前的date时间

所以,你可以使用它,如下所示:

 SELECT * FROM your_table WHERE Your_Date_Column BETWEEN '2011-01-04' AND DATE_ADD(NOW( ), INTERVAL -1 MONTH ) 
 SELECT * FROM table WHERE date BETWEEN ADDDATE(LAST_DAY(DATE_SUB(NOW(),INTERVAL 2 MONTH)), INTERVAL 1 DAY) AND DATE_SUB(NOW(),INTERVAL 1 MONTH); 

有关DATE_SUBADDDATELAST_DAY和其他有用的date时间函数的信息,请参阅文档 。

你可以使用where子句,如:

 where DateColumn between cast(date_format(date_sub(now(), interval 1 month),'%Y-%m-01') as date) and date_sub(now(), interval 1 month) 

SELECT * FROM table WHERE myDate BETWEEN now(),DATE_SUB(NOW(),INTERVAL 1 MONTH)

我的解决scheme是避免在使用编程语言编写sql时使用NOW(),并用stringreplace。 NOW()表示的问题包括当前时间。 所以要从查询日的开始(0小时和分钟)捕获,而不是:

r.date <= DATE_SUB(NOW(),INTERVAL 99 DAY)

我做了(PHP):

$ current_sql_date = date('Ymd 00:00:00'); 在sql中:

$ sql_x =“… r.date <= DATE_SUB('$ current_sql_date',INTERVAL 99 DAY)…”

这样,您将从特定日子的午夜获取数据