我想知道在MySQL中,无论年份如何,检查给定日期是否在范围内最简单的方法是什么。
在数据库表中,我有两个DATE字段:startfinish存储在YYYY-mm-dd
如果start = 2013-11-01finish = 2014-03-01任何年份的11月1日至3月1日之间的任何事情都应被接受。
有效日期:
2020-01-011980-02-28
无效日期:
2013-10-301968-07-30

最佳答案

几乎可以肯定,有更清洁的方法可以做到这一点,但这应该是可行的:

((DAYOFYEAR(finish_date) > DAYOFYEAR(start_date)
    AND (DAYOFYEAR(@date) >= DAYOFYEAR(start_date)
     AND DAYOFYEAR(@date) <= DAYOFYEAR(finish_date)))
OR (DAYOFYEAR(finish_date) <= DAYOFYEAR(start_date)
    AND (DAYOFYEAR(@date) >= DAYOFYEAR(start_date)
      OR DAYOFYEAR(@date) <= DAYOFYEAR(finish_date))))

对于2012年10月的开始日期和2020年11月的结束日期,这将返回10月至11月范围内的所有日期。如果实际上希望它返回范围大于一年的所有日期(因此涵盖一年中的所有日期),则可以添加:
OR DATEDIFF(Day, start_date, finish_date) > 356

在最后一个支架之前。

10-06 06:05