我需要一些帮助来编写一个MySQL查询,以显示上个月的行,但不是整个月,只是直到同一天,小时和分钟,因为它现在(),但是在1个月之前.
因此,例如,如果今天是5/19,下午5:25,我需要从4月19日午夜12点到4点到5点25分选择行(当然也是同一年).
谢谢!
Gol*_*rol 121
您可以通过计算前一个月的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)
Run Code Online (Sandbox Code Playgroud)
Ike*_*ker 29
使用一个MySQL函数可以轻松获得一个月之前:
SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);
Run Code Online (Sandbox Code Playgroud)
要么
SELECT NOW() - INTERVAL 1 MONTH;
Run Code Online (Sandbox Code Playgroud)
在我的头脑中,我想不出一个优雅的方式来获得MySQL上个月的第一天,但这肯定会奏效:
SELECT CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01');
Run Code Online (Sandbox Code Playgroud)
把它们放在一起,你得到一个解决你的问题的查询:
SELECT *
FROM your_table
WHERE t >= CONCAT(LEFT(NOW() - INTERVAL 1 MONTH,7),'-01')
AND t <= NOW() - INTERVAL 1 MONTH
Run Code Online (Sandbox Code Playgroud)
Chi*_*235 21
简单的代码请检查
SELECT * FROM table_name WHERE created <= (NOW() - INTERVAL 1 MONTH)
Run Code Online (Sandbox Code Playgroud)
这是与您的问题相关的MySQL日期操作的示例:
SELECT DATE_ADD( now( ) , INTERVAL -1 MONTH )
Run Code Online (Sandbox Code Playgroud)
以上将返回一个月前的日期时间
所以,您可以使用它,如下所示:
SELECT *
FROM your_table
WHERE Your_Date_Column BETWEEN '2011-01-04'
AND DATE_ADD(NOW( ), INTERVAL -1 MONTH )
Run Code Online (Sandbox Code Playgroud)
小智 7
SELECT
*
FROM
<table_name>
WHERE
<date_field> BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();
Run Code Online (Sandbox Code Playgroud)
同样,您可以选择 1 个月、2 个月等的记录。
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);
Run Code Online (Sandbox Code Playgroud)
有关、和其他有用的日期时间函数的信息,请参阅文档。DATE_SUBADDDATELAST_DAY