【发布时间】:2020-11-05 19:46:56
【问题描述】:
我需要根据任何给定年份和月份的一周中的第 n 天恢复/创建日期。
例如。我想知道 2020 年 12 月的第三个星期一是哪一天。
有什么建议吗?
【问题讨论】:
我需要根据任何给定年份和月份的一周中的第 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';
当然,您也可以使用日历表。这种方法可以很容易地延长请求 - 第一个月和第四个星期四,如果这是您真正想要的。
Here 是一个 dbfiddle。
【讨论】: