1

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

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

泰!

4

2 回答 2

4

我总是发现,如果你从当前日期减去一个月中的天数,你会得到上个月的最后一天。例如,在每月的 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))
于 2012-05-05T04:42:22.037 回答
-1

试试date_diff,例如:

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

产量:

1
于 2012-05-05T02:09:11.273 回答