MySQL选择从上个月到(now() - 1个月)的所有行,以便进行比较



我需要一些帮助来编写MySQL查询来显示上个月的行,但不是整个月,只有直到与现在相同的一天,小时和分钟(),而是1个月前。

因此,例如,如果今天是 5 月 19 日下午 5:25,我需要选择从 4 月 12 日上午 12:00 到 4 月 19 日下午 5:25 的行(当然也是同年)。

谢谢!

您可以通过计算前一个月的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_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)

这是与您的问题相关的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 )
SELECT
     * 
FROM 
     <table_name> 
WHERE 
     <date_field> BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW();

同样,您可以选择 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);

有关DATE_SUBADDDATELAST_DAY和其他有用的日期时间函数的信息,请参阅文档。

您可以使用

如下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 myDtate BETWEEN now()
    , DATE_SUB(NOW()
    , INTERVAL 1 MONTH)

我的解决方案是在用编程语言编写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)"

这样,您将从给定日期的午夜检索数据

也许是这样的 - 上个月日期(recDate)介于DATE_ADD(LAST_DAY(DATE_SUB(CURDATE(), 间隔 2 个月)), 间隔 1 天)和 LAST_DAY(DATE_SUB(CURDATE(), 间隔 1 个月) )

之间

相关内容

  • 没有找到相关文章

最新更新