SQL查询返回与当前或月中最后一天匹配的行

时间:2016-03-11 20:19:46

标签: php mysql sql

我在php中有一个调度程序应用程序,它根据存储在" schedule"中的信息在一个月的某些天运行操作。表。每行都是一个单独的操作,其中一列存储用于计划的月中的某天。应用程序每天通过cron作业执行操作。我遇到的问题是,如果有人定义了每个月31日运行的计划。

这是我目前用于获取当天运行时间表的查询:

SELECT * FROM schedules WHERE dayOfTheMonth = DAY(CURDATE())

这项工作几个月没有工作31天,但我想确保计划每月运行一次。因此,如果存储的日期超过本月的最后一天,它应该在该月的最后一天运行。有谁知道这样做的优雅方式?

1 个答案:

答案 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)设置的任何时间表 - 否则它只匹配行确切的一天匹配。