代码搬运工路过,MySQL小白,请多指教!
CHAP 1.
头一次遇到这个问题,想了好久(由于对于mysql的日期参数不熟悉),随后在网上查询,发现网上的解法千奇百怪,评论区也频频翻车,争论不断,主要原因是算法中存在考虑不周的问题。这种错误主要可以总结为一下几点:直接计算周数不考虑年份
这样的解法看似没有很大问题,甚至基于巧合可能在数据量较小的情况下测试集可以完全通过,但是存在不小的隐患。例如:1994年的11月14日 为1994年的第47周 星期1
2020年的11月14日 为2020年的第46周 星期6
因此若有人为1994年11月14日出生,按照2020年计算应该在2020年第46周(当前周)过生日,但是如果直接计算周数不考虑年份的化如下所示,则会产生不在此周过生日的结论。
当然此现象这和函数选取周几作为一周的开始密切相关,但是不论选择周日为一周的第一天还是周一作为一周的第一天,总会找到如上不同年份相同日月周数恰好错开一周的情况。因此此情况较为难以发现,在未使用大量数据之前,只有偶发的可能性。
select * from student
where WEEKOFYEAR(student.Sage)=WEEKOFYEAR(CURDATE());
[代码源](https://www.jianshu.com/p/476b52ee4f1b)直接利用天数计算周始周末
在得到当前天所对应的周数时,认为当前天-7即为本周的开始,存在鲜明的bug。例如:假设当前日期为2020年11月11日,则周始周末应该为:正确的: 2020年11月8日(46周) --->