mysql中 周对应年计算方式。

mysql中 周对应年计算方式。

今天遇到一个小同事的问题
说这个跨年的时候,周不好计算,不知道1月1日算去年的最后一周还是算今年的第一周
此时就必须要熟悉了解一下这MySql 中 week 函数 下面是介绍

WEEK(date, mode);有两个参数

mode是一个可选参数0,1,2,3,4,5,6,7,用于确定周数计算的逻辑

模式 一周的第一天 范围 说明
0 星期日 0-53 遇到本年的第一个星期天开始,是第一周。前面的计算为第0周。
1 星期一 0-53 假如第一周能超过3天,那么计算为本年的第一周。否则为第0周
2 星期日 1-53 遇到本年的第一个星期天开始,是第一周。
3 星期一 1-53 假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周。
4 星期日 0-53 假如第一周能超过3天,那么计算为本年的第一周。否则为第0周
5 星期一 0-53 遇到本年的第一个星期一开始,是第一周。
6 星期日 1-53 假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周。
7 星期一 1-53 遇到本年的第一个星期一开始,是第一周。

下面是模拟的数 大家可以把自己的 日期传进去,修改掉sql 中的日期

select 
t.days,   -- 日期
t.years,  -- 日期对应的年份
t.months, -- 日期对应的月份
t.weeks,  -- 日期对应的周 此处使用的是 mode 是 3 ,3 星期一 1-53 假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周。
case when months = 12 and weeks = 1 then years+1 else years end yearweeks  -- 周对应的年,比如 跨年的时候,日期当年,但是周 53 是属于上一年 2019年 53 周
from ( 
SELECT "2019-12-27" days, SUBSTR("2019-12-27",1,4) years, SUBSTR("2019-12-27",6,2) months, WEEK("2019-12-25",3) weeks union all 
SELECT "2019-12-27" days, SUBSTR("2019-12-27",1,4) years, SUBSTR("2019-12-27",6,2) months, WEEK("2019-12-26",3) weeks union all 
SELECT "2019-12-27" days, SUBSTR("2019-12-27",1,4) years, SUBSTR("2019-12-27",6,2) months, WEEK("2019-12-27",3) weeks union all 
SELECT "2019-12-28" days, SUBSTR("2019-12-28",1,4) years, SUBSTR("2019-12-28",6,2) months, WEEK("2019-12-28",3) weeks union all 
SELECT "2019-12-29" days, SUBSTR("2019-12-29",1,4) years, SUBSTR("2019-12-29",6,2) months, WEEK("2019-12-29",3) weeks union all 
SELECT "2019-12-20" days, SUBSTR("2019-12-20",1,4) years, SUBSTR("2019-12-20",6,2) months, WEEK("2019-12-30",3) weeks union all 
SELECT "2019-12-31" days, SUBSTR("2019-12-31",1,4) years, SUBSTR("2019-12-31",6,2) months, WEEK("2019-12-31",3) weeks union all 
select "2020-01-01" days, SUBSTR("2020-01-01",1,4) years, SUBSTR("2020-01-01",6,2) months, week("2020-01-01",3) weeks union all 
SELECT "2020-01-02" days, SUBSTR("2020-01-02",1,4) years, SUBSTR("2020-01-02",6,2) months, WEEK("2020-01-02",3) weeks union all 
SELECT "2020-01-03" days, SUBSTR("2020-01-03",1,4) years, SUBSTR("2020-01-03",6,2) months, WEEK("2020-01-03",3) weeks union all 
SELECT "2020-01-04" days, SUBSTR("2020-01-04",1,4) years, SUBSTR("2020-01-04",6,2) months, WEEK("2020-01-04",3) weeks union all 
SELECT "2020-01-05" days, SUBSTR("2020-01-05",1,4) years, SUBSTR("2020-01-05",6,2) months, WEEK("2020-01-05",3) weeks union all 
SELECT "2020-01-06" days, SUBSTR("2020-01-06",1,4) years, SUBSTR("2020-01-06",6,2) months, WEEK("2020-01-06",3) weeks union all 
SELECT "2020-01-07" days, SUBSTR("2020-01-07",1,4) years, SUBSTR("2020-01-07",6,2) months, WEEK("2020-01-07",3) weeks union all 
SELECT "2020-01-08" days, SUBSTR("2020-01-08",1,4) years, SUBSTR("2020-01-08",6,2) months, WEEK("2020-01-08",3) weeks union all 
SELECT "2020-01-09" days, SUBSTR("2020-01-09",1,4) years, SUBSTR("2020-01-09",6,2) months, WEEK("2020-01-09",3) weeks union all 
SELECT "2020-01-10" days, SUBSTR("2020-01-10",1,4) years, SUBSTR("2020-01-10",6,2) months, WEEK("2020-01-10",3) weeks union all 
SELECT "2020-01-11" days, SUBSTR("2020-01-11",1,4) years, SUBSTR("2020-01-11",6,2) months, WEEK("2020-01-11",3) weeks
) t
;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值