我尝试从MySQL中选择这个/最后一个和下一个日历月的数据。有几个类似的帖子,但是都没有提到1月vs上一个或12月vs下一个。我知道我可以在PHP中使用SQL来做到这一点,但是也许有人可以用SQL来解决问题。我尝试使用MOD(),但这带来了多年的问题。即上一个日历月避免在一月份为0
SELECT * FROM tbl_reservations WHERE ( (MONTH(tbl_reservations.start) = MOD((MONTH(NOW()) +11 ), 12)) AND ( YEAR(tbl_reservations.start) = YEAR(NOW()) ) )
有什么想法吗?谢谢。
答案 0 :(得分:1)
我认为这很容易。对于上一个日历月:
where extract(year_month from r.start) = extract(year_month from now() - interval 1 month)
下个月您可以使用类似的逻辑。
以上是不索引友好的。索引友好版本比较麻烦:
where r.start < curdate() - interval (1 - day(curdate())) day and
r.start >= (curdate() - interval (1 - day(curdate())) day) + interval 1 month
通过减去(1 - day(curdate()))
天来获得月份的第一天。然后使用日期操作和比较来获取上个月的日期。