我想知道在 MySQL 中检查给定日期是否在范围内而不考虑年份的最简单方法是什么。
在数据库表中,我有两个 DATE
字段:start
和 finish
存储在 YYYY-mm-dd
中
如果 start = 2013-11-01
和 finish = 2014-03-01
任何一年的 11 月 1 日到 3 月 1 日之间的任何时间都应该被接受。
有效日期:
2020-01-01
1980-02-28
无效日期:
2013-10-30
1968-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
在最后一个括号之前。
关于mysql - 无论年份如何,如何检查日期是否在范围内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19856180/