【问题标题】:MySQL get next 3 months of holidays by month, day (regardless of year)MySQL 按月、日(不分年份)获取接下来 3 个月的假期
【发布时间】:2014-04-17 20:03:24
【问题描述】:

我有一个按日期存储的假期表,所以他们有一年:

Christmas        2014-12-25
Birthday         2014-05-12
Holiday 3        2015-11-27

假设今天是 2020 年 11 月 1 日。如何按月、日发生的顺序检索接下来三个月的假期?所以记录集应该是这样的:

Holiday 3        2015-11-27
Christmas        2014-12-25

编辑:如果我修改表格以将月份和日期包含在单独的列中,下面 PressingOnAlways 建议,我如何查询日期范围?

Holiday          Year        Month      Date
Christmas        2014        12         25
Birthday         2014        05         12
Holiday 3        2015        11         27

【问题讨论】:

  • 并非所有假期都在每年的同一天。其中很多是基于月份的布局(例如,母亲节是在五月的第二个星期日),有些甚至更复杂(例如,复活节和其他一些宗教节日)。因此,无法按照您要求的方式使用您拥有的数据!
  • Duskwuff 是正确的,这仅适用于生日或静态月/日假期。
  • 好的,我已经修改了示例。
  • 对于任何感兴趣的人,我在 MS-SQL 中编写了一个 UDF 来动态计算任何给定年份的假期。我从未将它转换为 mySQL,但如果有人想转换并使用它,可以在 joebooth-consulting.com/sqlServer/sqlServer.html#CalendFunc 获得它。

标签: mysql sql


【解决方案1】:

您可以使用 SQL 的 DAY() 和 MONTH() 方法选择假期 在你的 where 子句中使用 DAY(holiday) AND MONTH(holiday) http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_day

http://www.sqlfiddle.com/#!2/92c97/15

【讨论】:

  • 5 月的第二个星期日,您可以在 5 月获得匹配 DAYNAME(holiday)='Sunday' 的条目并选择第二个日期
  • @corey,这实际上可能是比我更好的答案。
  • 太好了,谢谢!这看起来不错!我唯一的另一个问题是如何按发生顺序排列它们?意味着感恩节在圣诞节前列出?
  • 您可以尝试添加“ORDER BY MONTH(holiday)”
  • 这个查询虽然有点复杂,但解决了问题sqlfiddle.com/#!2/92c97/15
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
  • 2018-09-30
  • 2016-01-11
相关资源
最近更新 更多