MySQL的月度日期

时间:2013-04-02 09:34:31

标签: mysql

我目前遇到了一些麻烦。我正在尝试实施的系统是一个“回调”系统,它将针对将在指定日期弹出系统的客户设置回调。

其中一项功能是重复发生的回调。这两个选项是每月和每年。我每年的工作都很好:

SELECT * FROM `callbacks` WHERE (
-- Yearly Callbacks
(DAYOFYEAR(`date_callback`) = DAYOFYEAR(NOW()) AND `occurs` = 'yearly') OR

-- Other Callbacks For Today
(DATE(`date_callback`) = DATE(NOW())))

但我无法想象如何检查每月的回调是否到期。它应该只在列表中每30天发生一次(使用上面的查询。)我正在使用DAYOFMONTH但我意识到如果为31st设置回调,它将不会出现在尽管是每月回调,但仍然会列出几个月的数据。

因此,如果为March 3rd 2013设置了一个并设置为montly,则如果日期为:

,它应该出现在查询结果中
  • March 3rd 2013
  • April 1st 2013
  • May 1st 2013
  • May 31st 2013
  • June 30th 2013

等等。有没有人以前处理过这个问题?

1 个答案:

答案 0 :(得分:1)

我会考虑使用区间,比如

。 。 。     (DATE_ADD(现在(),间隔1个月)) 。 。

另见this帖子。

或者 - 您可以尝试(伪代码)

now() - pre_saved_date % 30 (module of 30)

对于% - 使用MOD功能,如

select MOD(2, 3);
select 3 % 2;