繁体   English   中英

MySQL:根据特定月/年的第 n 天获取日期

[英]MySQL: Get date based on the nth day of the week on a particular month/year

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

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

有什么建议?

测试表达式:

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)

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

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';

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

是一个 db<>fiddle。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM