【问题标题】:MySQL: Get date based on the nth day of the week on a particular month/yearMySQL:根据特定月/年的一周中的第 n 天获取日期
【发布时间】:2020-11-05 19:46:56
【问题描述】:

我需要根据任何给定年份和月份的一周中的第 n 天恢复/创建日期。

例如。我想知道 2020 年 12 月的第三个星期一是哪一天。

有什么建议吗?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    测试表达式:

    SELECT (@year*10000 + @month*100 + 1) + INTERVAL 7 * @weeknumber + @weekday - WEEKDAY(@year*10000 + @month*100 + 1) - 7*(@weekday > WEEKDAY(@year*10000 + @month*100 + 1) - 1) DAY
    

    在哪里

    @year - 年份(问题示例中为 2020)

    @month - 月份 (12)

    @weekday - 需要的工作日 (0) (0-Monday,1-Tuesday,...6-Sunday)

    @weeknumber - 一个月中需要的天数 (3)

    【讨论】:

      【解决方案2】:

      一种方法是蛮力法。生成当月的所有日期并选择您想要的日期:

      with recursive dates as (
            select date('2020-12-01') as dte
            union all
            select dte + interval 1 day
            from dates
            where dte < last_day(dte)
          )
      select *
      from (select d.*, dayname(dte) as dname,
                  row_number() over (partition by dayname(dte) order by dte) as cnt
            from dates d
           ) d
      where cnt = 3 and dname = 'Monday';
      

      当然,您也可以使用日历表。这种方法可以很容易地延长请求 - 第一个月和第四个星期四,如果这是您真正想要的。

      Here 是一个 dbfiddle。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-12
        • 2015-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多