mysql - 无论年份如何,如何检查日期是否在范围内

标签 mysql

我想知道在 MySQL 中检查给定日期是否在范围内而不考虑年份的最简单方法是什么。

在数据库表中,我有两个 DATE 字段:startfinish 存储在 YYYY-mm-dd

如果 start = 2013-11-01finish = 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/

相关文章:

mysql - 将日期时间条目与具有多个时间范围的表相匹配

php - 尝试使用 php 创建数据库时收到 "HTTP ERROR 500"

python - Django 中的 SQL 查询问题

php - 将数据库输出插入特定的 div 标签

java - 如何使用java在mysql的日期时间字段中插入当前日期

mysql - 创建另一个表只是为了存储一些选项?

mysql - 在 SQL 中使用子字符串的问题

php - 如何处理像 Last.FM 或维基百科这样的社区 URL 样式?

mysql - UPDATE 和 ORDER BY 的使用不正确。比它可以替换为?

mysql - 无法选择按created_at分组的行