一、取年周
按照习惯,跨年的周中的在哪一年的天数多就算哪一年的周,所以日期所在的年不一定是周所在的年,比如2016-01-01是2015年53周。
可以通过以下sql判断跨年的周属于哪一年,实现得到前一天所在的年周
select year(date_sub(next_day(date_sub(current_date,1),'MO'),4))*100+weekofyear(date_sub(current_date,1));
例如:今天是2019-03-02,前一天是2019-03-01,是第201909周。
二、算周几
根据一个日期算它是一周中的星期几
大部分的算法是:
-- ${date}为日期参数
pmod(datediff(${date}, '1920-01-01') - 3, 7)
既某个日期和一个已知周几的日期相差的天数除以一周7天,余数既为周几,但是这样周一至周六分别为1-6,但周日就会为0,所以将周日变成我们习惯的7可以这样写:
-- ${date}为日期参数
IF(pmod(datediff(${date}, '1920-01-01') - 3, 7)='0', 7, pmod(datediff(${date}, '1920-01-01') - 3, 7))
这里还有一种本人常用的方法:
-- ${date}为日期参数
-- next_day(${date},'MO')为下周一的日期
8-datediff(next_day(${date},'MO'),${date})