[英]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.