我需要一些帮助来编写MySQL查询,以显示上个月的行,但不显示整个月的行,仅显示直到now,(h)和同一天,一小时和一分钟,直到1个月为止。
因此,例如,如果今天是下午5:25的5/19,我需要从4/1的午夜12:00 am 4/1到5:25 pm(当然也从同一年)中选择行。
谢谢!
Answers:
您可以通过计算前一个月的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)
SET @FirstDayLastMonth = (DATE_ADD(LAST_DAY(DATE_SUB(NOW(), INTERVAL 2 MONTH)), INTERVAL 1 DAY));
,然后SET @LastDayLastMonth = (LAST_Day(@FirstDayLastMonth));
我需要上个月的第一天和最后一天。非常感谢GolezTrol !!!
只需一个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)
SELECT * FROM table_name WHERE created >= (NOW() - INTERVAL 1 MONTH)
?
我的解决方案是避免在使用NOW()
编程语言编写sql时使用,而用字符串代替。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() - INTERVAL 1 DAY);