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_SUB
, ADDDATE
, LAST_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)…”
这样,您将从特定日子的午夜获取数据