我有一个带有费用的mysql-db,带有日期时间。每个月我都想创建一张包含上个月或之前所有费用的发票。因此,如果它可能是2012年2月5日或30日,我仍然只想要2012年4月或更早的发票。我尝试过使用date_sub,但它只减去了一个月,所以它只发票到上个月的同一天。我该怎么办?
从广告WHERE AdEnd>获取* ??
泰!
答案 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