mysql - SQL:查询给定日期的时间段

标签 mysql sql

我有一个一年中的时期列表,它们每年都相同。您可以将其视为一个季节。它们有开始日期和结束日期。

因为可能会有相互跳跃的季节,我需要查询所有给定日期的匹配季节,无论是哪一年

举个例子:

第 1 季:1 月 1 日至 1 月 10 日 第二季:1月6日至1月8日 Season3:1月11日-1月20日

鉴于日期是 1 月 7 日,我需要检索第 1 季和第 2 季。

我试过将所有日期转换为同一年,但当一个季节的开始日期“晚于”结束日期时(例如,有一个从 11 月开始到 2 月结束的时期),它不起作用).

在此先感谢您的帮助。

编辑,示例数​​据:

StartDate   EndDate     SeasonId
2000-08-01  2000-08-31  4
2000-12-29  2000-01-02  3
2000-06-01  2000-07-30  3
2000-09-01  2000-09-30  3
2000-01-06  2000-01-08  3
2000-04-07  2000-04-17  3
2000-04-28  2000-05-01  3
2000-06-02  2000-06-05  3
2000-06-23  2000-06-25  3
2000-09-08  2000-09-11  3
2000-09-22  2000-09-25  3
2000-10-12  2000-10-15  3
2000-11-01  2000-11-05  3
2000-12-01  2000-12-10  3
2000-12-22  2000-12-26  3
2000-03-01  2000-05-31  2
2000-10-01  2000-10-31  2
2000-11-01  2000-02-28  1

例如,我需要日期 2000-02-08 的季节,并检索 seasonId = 1 或日期 2000 -10-13并检索 seasonId = 3, seasonId = 2

最佳答案

我会在 2 个“选项”中执行此操作:(以下 SQL 假设您已经去掉了表中的年份,只留下月-日格式。)

 select ... from seasons s where 
    (s.startDate <= s.endDate and s.startDate <= @mydate and s.endDate >= @mydate) or 
    (s.startDate > s.endDate and s.startDate >= @mydate and s.endDate <= @mydate)

关于mysql - SQL:查询给定日期的时间段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42784813/

相关文章:

MySQL 需要有关查询的建议

php - 如何使 PHP 更新 MySQL 表表单显示所有数据行

mysql - 更改事件表以使键不唯一

SQL:如何在一个查询中编写多个交互式脚本(插入行)

php - mysql 中每一行的页面

mysql - MySQL 中多余的列,我可以删除它吗?

java - 从 EJB 计时器中删除大量行

php - 更新数据库时出错

php - echo 允许空值的日期变量的 fatal error

mysql - mysql查询日期间隔的替代方案