【问题标题】:MySQL Select rows from last month however it contains(31/30/28 days) or leap yearMySQL 选择上个月的行,但它包含(31/30/28 天)或闰年
【发布时间】:2015-11-15 18:25:25
【问题描述】:

现在,我有一个 mysql 查询来获取上个月的行,其中 date 是时间戳列,例如,

date BETWEEN date_format(NOW() - INTERVAL 1 MONTH, '%Y-%m-01')
AND last_day(NOW() - INTERVAL 1 MONTH);

但问题是,我只得到上个月 30 天的记录。它在 30 天或更短的时间内工作正常。但是对于像 12 月这样的月份,我需要 31 天的所有记录。这里的修正是什么?谢谢。

【问题讨论】:

  • “上个月”是什么意思?
  • @GordonLinoff :现在上个月是 October 。在 2016 年 1 月时,最后一个月是 December 。谢谢。

标签: php mysql


【解决方案1】:

如果您想要上一月月的数据,那么您可以使用减去当前日期的技巧:

where date >= date_sub(date_sub(curdate(), interval day(curdate()) - 1 day), interval 1 month) and
      date < date_sub(curdate(), interval day(curdate()) - 1 day)

【讨论】:

  • 先生,不幸的是,代码没有返回任何结果!我应该发布我的完整代码吗?
【解决方案2】:

我尝试了很多参考资料,最后我得到了准确的答案。我的最终代码是,

EXTRACT(YEAR_MONTH FROM date) = EXTRACT(YEAR_MONTH FROM CURDATE() - INTERVAL 1 MONTH)

谢谢大家。

【讨论】:

  • 这种方法的问题是引擎不能使用date上的索引。
  • @GordonLinoff 感谢您的指示,先生。
【解决方案3】:

你必须加上加 1 减去减去一个日期。

【讨论】:

    猜你喜欢
    • 2018-07-07
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多