MySQL中获取日期所在周的周一和周日

790 阅读1分钟

数据有时候需要进行周的同比和环比操作,而数据库中周是数字排列的,比如2022年的第20周,这个时候我们最好将第20周的范围给出,便于用户在报表展示及数据分析时候使用, 我们使用mysql来展示下如何使用

按照我们的习惯 周一开始 周日结束,算一个自然周,我们有一个日期码表,里面有连续的日期字段

select  the_date
from dim_date;

image.png

select the_date, 
concat(
 DATE_FORMAT( date_add(the_date,INTERVAL -weekday(the_date) DAY), '%Y-%m-%d'), ' : ',
DATE_FORMAT( date_add(the_date,INTERVAL 6-weekday(the_date) DAY),'%Y-%m-%d')) as week_section
from dim_date;

image.png

国际惯例周日算一周开始 周六算结束的计算

select the_date, case when weekday(the_date)=6 then DATE_FORMAT( the_date,'%Y-%m-%d')
                      else  DATE_FORMAT( date_add(the_date,INTERVAL -weekday(the_date)-1 DAY),'%Y-%m-%d')
                      end as st,
				 case when weekday(the_date)=6 then DATE_FORMAT( date_add(the_date,INTERVAL 6 DAY),'%Y-%m-%d')
                      else  DATE_FORMAT( date_add(the_date,INTERVAL 5-weekday(the_date) DAY),'%Y-%m-%d')
                      end as ed
from dim_date

image.png