我需要一些帮助来编写MySQL查询来显示上个月的行,但不是整个月,只有直到同一天,小时和分钟,因为它是现在(),但1个月前。因此,例如,如果今天是5/19在下午5:25,我需要从午夜12:00 am 4/1到下午5:25 pm(当然也是同一年)从午夜12:00选择行。MySQL从上个月直到(现在() - 1个月)选择所有行,用于比较目的
谢谢!
我需要一些帮助来编写MySQL查询来显示上个月的行,但不是整个月,只有直到同一天,小时和分钟,因为它是现在(),但1个月前。因此,例如,如果今天是5/19在下午5:25,我需要从午夜12:00 am 4/1到下午5:25 pm(当然也是同一年)从午夜12:00选择行。MySQL从上个月直到(现在() - 1个月)选择所有行,用于比较目的
谢谢!
可以拿到第一个月,由之前计算每月的LAST_DAY并添加一天。这很尴尬,但我认为它比将日期格式化为字符串并将其用于计算更好。
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_ADD(now() , INTERVAL -1 MONTH)
以上将返回日期时间在一个月前
所以,你可以使用它,如下所示:
SELECT *
FROM your_table
WHERE Your_Date_Column BETWEEN '2011-01-04'
AND DATE_ADD(NOW(), INTERVAL -1 MONTH)
你可以使用一个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表WHERE myDtate从现在(),DATE_SUB(NOW(),间隔1个月)
获得一个月前很容易用一个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
哇!我喜欢“上个月的第一天”! – realtebo 2014-01-29 11:10:05
我的解决办法,以避免与您的编程语言编写SQL时,用一个字符串替代使用NOW()
。如您所示,NOW()
的问题包括当前时间。所以,从查询天(0小时和分钟)的开始拍摄,而不是:
r.date <= DATE_SUB(NOW(), INTERVAL 99 DAY)
我做(PHP):
$current_sql_date = date('Y-m-d 00:00:00');
在SQL:
$sql_x = "r.date <= DATE_SUB('$current_sql_date', INTERVAL 99 DAY)"
由此,您将从指定日期的午夜检索数据
你可以尝试使用这样的事情当天'SELECT DAY(NOW());'和这昨天 'SELECT DAY(NOW() - 间隔1天);' – Federico 2013-10-24 14:00:48
简单代码请检查
SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)
+1不错的方法来检索上一个月的第一天没有字符串转换 – Andomar 2011-05-19 21:05:44