第一题:查询本周考试的学生成绩。
- DATA_ADD()语法:date就是要操作的日期,INTERVAL就是要间隔的日期 expr可以写数字,unit用来写单位,比如DATE_ADD(CURDATE(), INTERVAL 7 DAY)就是当前日期加上一星期。
- CURDATE()就是当前日期 ,
- 格式:
-
DATE_ADD(date, INTERVAL expr unit)
代码解释:就是当前日期后面追加七天单位用DAY,用between判断
select * from result where result.ExamDate
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 7 DAY);
第二题:查询未来3个月要过生日的学生
- 我们要使用between and 来判断日期
- 月份的加减不能够简单使用+ 或 - ,当月份为11月加三个月就变成了14月,这显然不合理,所以我们使用DATA_ADD()
- MONTH(date)就是把日期放进去能够取出月份
- 我们以表student为例子,BornDate是出生日期
思路就是,将生日加年份,加到今年,然后就可以使用between and来进行判断在不在现在和未来三个月之间
SELECT *
FROM student a
WHERE DATE_ADD(a.BornDate, INTERVAL (YEAR(CURDATE()) - YEAR(a.BornDate)) YEAR)
BETWEEN CURDATE() AND DATE_ADD(CURDATE(), INTERVAL 3 MONTH);
第三题:找出在特定日期(如'2023-04-01')之后每个客户首次下单的日期
-- - 输出客户ID和首次下单日期。
-- - 如果客户在指定日期之后没有下过单,则不显示该客户。
1.要找到首次下单日期使用MIN()函数,这些函数需要和group by一起使用
2.'2023-04-01'这个日期之后可以使用大于号小于号:order_date > '2023-04-01'
select MIN(orders.order_date) as '下单日期',orders.customer_id as '客户id' from orders
where orders.order_id in (
select orders.order_id FROM orders
where orders.order_date > '2023-04-01' )
GROUP BY orders.customer_id;
第四题:查询下周过生日的学生
这个题和第一题:查询本周考试的学生成绩。不一样,因为这个是生日,涉及到年,思路和第二题一样
也是通过ADDDATE(s_birth,INTERVAL (YEAR(CURDATE())- YEAR(student.s_birth)) YEAR)使生日的年份变成和当前时间一样的年份,然后通过between and来判断
select * from student where ADDDATE(s_birth,INTERVAL (YEAR(CURDATE())- YEAR(student.s_birth)) YEAR) BETWEEN CURDATE() AND ADDDATE(CURDATE(),INTERVAL 7 DAY);
标签:语句,题目,SQL,INTERVAL,ADD,日期,CURDATE,YEAR,orders
From: https://blog.csdn.net/qq_62859013/article/details/142999120