我有一个mysql-db,里面有费用,还有一个日期时间。每个月我都想创建一张包含上个月或更早的所有费用的发票。因此,如果是 2012 年 2 月 2 日、5 日或 30 日,我仍然只想要 2012 年 4 月或更早的发票。我试过使用 date_sub,但它只是减去一个月,所以它只在上个月的同一天开具发票。我该怎么做?
从广告中获取 * WHERE AdEnd > ??
泰!
我总是发现,如果你从当前日期减去一个月中的天数,你会得到上个月的最后一天。例如,在每月的 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))
试试date_diff
,例如:
SELECT DATEDIFF('2008-11-30','2008-11-29') AS DiffDate
产量:
1