mysql 周 MySQL的跨年周統計問題

2021-10-25 14:22:50 字數 1127 閱讀 6812

在mysql中,如果要查詢的表中只有日期字段,但是業務需求要按照周分組,排序的話,mysql提供了多種方法;

1。date_format

date_format(date, format) 函式根據format字串格式化date值。

然後在分組排序就很簡單了,不過這裡有乙個問題,就是標題所示,跨年使用這種方式;

在mysql中執行下列語句:

select date_format("2017-12-31","%y-%u"),date_format("2018-1-1","%y-%u");

結果顯示如下

%u代表的是第0周開始的,使用星期天作為一周的第一天,當遇到本年的第乙個星期天時,就是第 1 周了,今年第乙個星期天之前的天數就當做今年的第0周

當遇到同一周跨年的時候,12月份的算作去年的最後一周,1月份的算作今天的第0周就不對了,

如2017-12-31和2018-01-01是在同一周(週日-週六為同一周),所以這種方法有誤

可以用格式符%x-%v代替

select date_format("2017-12-31","%x-%v"),date_format("2018-1-1","%x-%v");

結果顯示如下

%v 與 %u 一樣的地方就是也是使用週日作為一周的開始,並且也是遇到第乙個週日開始算作是第一周,但是這兩個對這個下一年第乙個週日之前的這幾天處理不一樣,%u是把下一年之前的幾天算作第0週而%v是把下一年之前的幾天算作上一年的最後一周,所以使用%x-%v這樣的格式符就能解決問題

2.yearweek

.mysql 的 yearweek 是獲取年份和週數的乙個函式,函式形式為 yearweek(date[,mode])

select yearweek("2017-12-31",),yearweek("2018-1-1");

結果顯示如下

mysql 上週 跨年 mysql 跨年查詢

本週 select sum qty qty from user where yearweek createdate yearweek now 上週 select sum qty qty from user where yearweek smo.createdate yearweek date sub...

跨年3周安排

單詞第一輪 每天70個新單詞,所有系統加進來的複習單詞,2月28日結束 408筆記整理 12月22日 1月8日 12.22學年 408筆記 作業系統 12.23寫作 408筆記 12.24 設計 408筆記 12.25市場調查 408筆記 12.26erp 12.27安排設計模式和市場調查複習 12...

SQL 跨年周留存計算

正常計算周留存,可以直接用weekofyear t1.dt weekofyear t2.dt 1 但是如果遇到跨年,按照一年52個周,新年又從1開始,導致跨年的周留存,計算不出來 每一周的開始日期和結束日期是相對固定的,可以先把日期固定到周,然後取各個周的開始日期,本週與下週的開始日期,固定的日期之...