我在php中有一个调度程序应用程序,它根据存储在" schedule"中的信息在一个月的某些天运行操作。表。每行都是一个单独的操作,其中一列存储用于计划的月中的某天。应用程序每天通过cron作业执行操作。我遇到的问题是,如果有人定义了每个月31日运行的计划。
这是我目前用于获取当天运行时间表的查询:
SELECT * FROM schedules WHERE dayOfTheMonth = DAY(CURDATE())
这项工作几个月没有工作31天,但我想确保计划每月运行一次。因此,如果存储的日期超过本月的最后一天,它应该在该月的最后一天运行。有谁知道这样做的优雅方式?
答案 0 :(得分:2)
SELECT
*
FROM
schedules
WHERE
(
DAY( CURDATE() ) = DAY( LAST_DAY( CURDATE() ) )
AND
dayOfTheMonth > DAY( LAST_DAY( CURDATE() ) )
)
OR
dayOfTheMonth = DAY( CURDATE() )
如果当天是该月的最后一天(例如2月28日),那么也将选择并返回在28日之后的一天(例如29,30,31)设置的任何时间表 - 否则它只匹配行确切的一天匹配。