在sql开发中,经常会有按周进行group by,在将date处理成周时,mysql提供了很多方便的函数,例如week(),yearweek()等。
其中yearweek()是包含年份的week()函数,能更方便的进行聚合。
这次就提供一种对该函数的逆转换方法。
SELECT CURDATE(),
yearweek(curdate()),
weekday(curdate()),
concat(yearweek(curdate()),weekday(curdate())+1),
STR_TO_DATE(concat(yearweek(curdate()),weekday(curdate())+1),'%X%V%w')
;
CURDATE() | yearweek(curdate()) | weekday(curdate()) | concat(yearweek(curdate()),weekday(curdate())+1) | STR_TO_DATE(concat(yearweek(curdate()),weekday(curdate())+1),'%X%V%w') |
2015-07-29 | 201530 | 2 | 2015303 | 2015-07-29 |
这里做一下解释,第一列是取当前的日期,用yearweek处理后,是年份+周,当前日期正好为第30周(这个周数1-53中的一个,即新年内新第一周为1,今年中去年周内的日子,则为去年+53)
第三列是取周几的函数,这里做一下说明,这个值得区间为0-6,即周一为0,图中2即是周三
第四列是对这个日期进行拼接,只有年份与周不能还原出date,这里需要添加一个星期数,这里注意因为后面使用%w匹配,所以数值上要+1,因为%w是认为1周一
第五列即是对这个日期转换的还原