【问题标题】:Get data up until last day of previous month in MySQL在 MySQL 中获取直到上个月最后一天的数据
【发布时间】:2012-05-05 02:04:14
【问题描述】:

我有一个mysql-db,里面有费用,有一个日期时间。每个月我都想创建一张包含上个月或更早的所有费用的发票。因此,如果是 2012 年 2 月 2 日、5 日或 30 日,我仍然只想要 2012 年 4 月或更早的发票。我试过使用 date_sub,但它只是减去一个月,所以它只在上个月的同一天开具发票。我该怎么做?

从广告中获取 * WHERE AdEnd > ??

泰!

【问题讨论】:

    标签: mysql datetime date


    【解决方案1】:

    我总是发现,如果你从当前日期中减去以天为单位的月份中的某一天,你将得到上个月的最后一天。例如,在每月 15 日,减去 15 天,您将得到上个月的最后一天:

    SELECT (DATE_SUB(CURDATE(),INTERVAL DAYOFMONTH(CURDATE()) DAY))
    

    如果CURDATE()2012-05-05,那么上面的返回2012-04-30

    因此,要将广告投放到上个月的最后一天,请执行以下操作:

    SELECT *
    FROM Ads
    WHERE AdEnd <= (DATE_SUB(CURDATE(),INTERVAL DAYOFMONTH(CURDATE()) DAY))
    

    如果 AdEnd 是 DATE,则此方法有效,但如果它是 DATETIME,您只需要执行 less than the first of the month,因此您减去一天即可获得每月的第一天,如下所示:

    SELECT *
    FROM Ads
    WHERE AdEnd < (DATE_SUB(CURDATE(),INTERVAL DAYOFMONTH(CURDATE()) - 1 DAY))
    

    【讨论】:

    • +1 请注意,如果 AdEnd 确实是 OP 所写的 DATETIME,则您需要执行类似于 ... WHERE AdEnd &lt; DATE_SUB(CURDATE(), INTERVAL DAYOFMONTH(CURDATE()) - 1 DAY) 的操作
    • 为什么日期和日期时间有区别?无论如何,我会试试这个!当我得到结果时发布结果。无论如何感谢您的帮助! (顺便说一句:当你想到它时实际上非常简单;我正在减去几个月,但这更容易)
    • 从外观上看,它有效!非常感谢,Ami 和 Pilcrow!
    【解决方案2】:

    试试date_diff,例如:

    SELECT DATEDIFF('2008-11-30','2008-11-29') AS DiffDate
    

    产量:

    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多