MySQL恶心的周跨年问题

刚过完元旦就遇到了让人恶心的bug,都还没有从朋友圈狗粮阴影里出来,😒。先记录一下吧,防止以后会遇到相似的bug。之前负责公司的一个运营平台,里面有一个周统计任务,每周统计一下服务的使用量。我采用的思路就是将使用记录的创建时间用weekofyear以及year分别获取记录的周以及年,然后用group by分组统计。

weekofyear获取的是一年中的第几周,year获取的是时间的年分

这样处理的问题大多数情况下都是没有问题的,但是在特殊情况下就会出现问题,比如说周跨年,就是说一年中的最后一个周的七天可能包含两年,类似19年最后一周就是,19年12月30日~20年的1月5日。那么在遇到这种情况怎么样才能在尽量不改动业务的情况下修复这个问题呢,其实也很简单,使用YEARWEEK函数,这个函数有两个参数,具体的解释可以看这篇博客,这个函数的效果就是不管是20191230还是20200105这中间哪个时间段都可以达到输出一样的结果,拿到这个结果之后对其进行切割,用left以及right函数就可以分别获取周和年,在最小改动业务的情况下完美的解决了这个bug,😌

测试