MySQL如何过滤来自上一个日历月(而不是上个月)的结果

时间:2019-12-12 15:56:12

标签: mysql sql

我尝试从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()) ) )

有什么想法吗?谢谢。

1 个答案:

答案 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()))天来获得月份的第一天。然后使用日期操作和比较来获取上个月的日期。