在MySQL中获取数据直到上个月的最后一天

时间:2012-05-05 02:04:14

标签: mysql datetime date

我有一个带有费用的mysql-db,带有日期时间。每个月我都想创建一张包含上个月或之前所有费用的发票。因此,如果它可能是2012年2月5日或30日,我仍然只想要2012年4月或更早的发票。我尝试过使用date_sub,但它只减去了一个月,所以它只发票到上个月的同一天。我该怎么办?

从广告WHERE AdEnd>获取* ??

泰!

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:-1)

尝试date_diff,例如:

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

的产率:

1