MySQL的跨年周統計問題

在mysql中,若是要查詢的表中只有日期字段,可是業務需求要按照周分組,排序的話,mysql提供了多種方法; 1。date_format DATE_FORMAT(date, format) 函數根據format字符串格式化date值。 這裏能夠使用 date_format(date,"%Y-%U")將日期格式化爲year-week的方式(注意大小寫,Y、U以及更多格式化支持的字符串能夠百度或者參考下方文章連接), 而後在分組排序就很簡單了,不過這裏有一個問題,就是標題所示,跨年使用這種方式; 在mysql中執行下列語句:mysql

select date_format("2017-12-31","%Y-%U"),date_format("2018-1-1","%Y-%U");

結果顯示以下 輸入圖片說明sql

%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這樣的格式符就能解決問題ui

2.YEARWEEK .MySQL 的 YEARWEEK 是獲取年份和週數的一個函數,函數形式爲 YEARWEEK(date[,mode]) mode的值從0-7,分別指示每週的第一天是周幾,具體能夠百度或者參考下方連接文章.net

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

結果顯示以下 輸入圖片說明code

參考連接 https://stackoverflow.com/questions/1736010/how-to-group-by-week-in-mysql http://blog.csdn.net/lifuxiangcaohui/article/details/50953018 http://blog.csdn.net/u010004317/article/details/54426836orm

相關文章
相關標籤/搜索