mysql中 周对应年计算方式。

  • Post author:
  • Post category: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
;



版权声明:本文为zhangli_li520原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。