MySQL选择从上个月到(现在() - 1个月)的所有行,用于比较目的

new*_*pie 63 mysql datetime

我需要一些帮助来编写一个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)

  • +1很好的方法来检索上个月的第一天没有字符串转换 (5认同)
  • +1非常好.... FirstDayLastMonth));`我需要获取上个月的第一天和最后一天。非常感谢GolezTrol !!! (2认同)

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)

  • 不应该大于等于吗?`SELECT * FROM table_name WHERE 创建 &gt;= (NOW() - INTERVAL 1 MONTH)`? (3认同)

Sen*_*kin 9

这是与您的问题相关的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 个月等的记录。


unu*_*tbu 5

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