最近偶然发现这位朋友 @carolinezhq 分享的sql练习题carolinezhq:【SQL】SQL面试50题 分类梳理与解答zhuanlan.zhihu.com
其中最后的52题比较有意思(写出52题,那53题就不成问题了),题目大意是:从学生信息表(student)中通过出生日期字段(sage)查询出本周过生日的同学。相关表如下图:
这个题目对于我这个mysql新手来说还是比较棘手的,百度一翻之后发现很多答案要么是错的,要么写得我一脸懵逼,最后决定还是自己动手丰衣足食。
解题大体思路:判断生日日期与当前日期是否为本年度相同周数
两个注意点(也是难点):1.同周跨年(即上一年的12月31号与下一年的1月1号在同一个星期),2.特殊的2月29号生日(对于这一点我假定在非闰年时,这类同学是在3月1号过生日)
我的方法是先创建函数对特殊情况进行分类讨论,全部语句如下:
delimiter //
create function birthday(sage date)
returns boolean NOT DETERMINISTIC NO SQL
begin
declare date_now date;
declare bool boolean;
set date_now = curdate();
if month(sage)=1