mysql练习题_8.MYSQL时间函数-练习题-待询问

本篇文章的参考文献:

PART 1:字符串拼接问题

mysql 实现字符串的拼接_SmileTimLi的博客-CSDN博客​blog.csdn.net
a3e8001cf63622de42f3108ed7b8df67.png
mysql 实现字符串的拼接_SmileTimLi的博客-CSDN博客​blog.csdn.net
a3e8001cf63622de42f3108ed7b8df67.png

PART 2:有疑问的问题的网上解答(待询问助教/老师)

查询本周过生日的学生_qq_20144193的博客-CSDN博客​blog.csdn.net
e140b1356183b167db52295702279269.png

练习题来源:

Mysql_45道练习题​www.jianshu.com
0661a0f26d0816465487ce2497ad1212.png
  1. 在数据库中建数据表:
 --1.学生表 Student(SId,Sname,Sage,Ssex)
    SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别
--2.课程表 Course(CId,Cname,TId)
    CId 课程编号,Cname 课程名称,TId 教师编号
--3.教师表 Teacher(TId,Tname)
    TId 教师编号,Tname 教师姓名
--4.成绩表 SC(SId,CId,score)
    SId 学生编号,CId 课程编号,score 分数
创建测试数据
 学生表 Student:
导入数据方法:将以下 mysql 语句,完整复制到 workbench 语句窗口(或者是 mysql 的黑窗口),然后运行即可导入,不需要另外创建表,下面表的操作一样。这些语句第一条是创建表(create table),后面都是插入数据到表中(insert into table )。
create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10));
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('09' , '张三' , '2017-12-20' , '女');
insert into Student values('10' , '李四' , '2017-12-25' , '女');
insert into Student values('11' , '李四' , '2017-12-30' , '女');
insert into Student values('12' , '赵六' , '2017-01-01' , '女');
insert into Student values('13' , '孙七' , '2018-01-01' , '女');
 科目表 Course
create table Course(CId varchar(10),Cname nvarchar(10),TId varchar(10));
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
 教师表 Teacher
create table Teacher(TId varchar(10),Tname varchar(10));
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
 成绩表 SC
create table SC(SId varchar(10),CId varchar(10),score decimal(18,1));
insert into SC values('01' , '01' , 80);
insert into SC values('01' , '02' , 90);
insert into SC values('01' , '03' , 99);
insert into SC values('02' , '01' , 70);
insert into SC values('02' , '02' , 60);
insert into SC values('02' , '03' , 80);
insert into SC values('03' , '01' , 80);
insert into SC values('03' , '02' , 80);
insert into SC values('03' , '03' , 80);
insert into SC values('04' , '01' , 50);
insert into SC values('04' , '02' , 30);
insert into SC values('04' , '03' , 20);
insert into SC values('05' , '01' , 76);
insert into SC values('05' , '02' , 87);
insert into SC values('06' , '01' , 31);
insert into SC values('06' , '03' , 34);
insert into SC values('07' , '02' , 89);
insert into SC values('07' , '03' , 98);

2.时间函数相关的练习题

题目:

1、查询各学生的年龄,只按年份来算
2、按照出生日期来算,当前月日 < 出生年月的月日则,年龄减
3、查询本周过生日的学生

我的答案:

-- 1、查询各学生的年龄,只按年份来算
select *,year(now())-year(sage) as age
from student;
-- 2、按照出生日期来算,当前月日 < 出生年月的月日则,年龄减1
select *, timestampdiff(year,sage,now()) as age
from student;
-- 3、查询本周过生日的学生
select *
from student
where week(date(concat_ws("-",year(now()),SUBSTR(sage,6,5))))=week(now());
-- *******考虑出生年所在周,可能与本年不同的情况。

参考答案:

1、查询各学生的年龄,只按年份来算
select  
  *, 
  year(now())-year(sage) as age 
from student;
2、按照出生日期来算,当前月日 < 出生年月的月日则,年龄减一
使用year提取年份进行计算:
select
   *,
   case when substr(sage,6,5)<substr(now(),6,5) then year(now())-year(sage)
        when substr(sage,6,5)>=substr(now(),6,5) then year(now())-year(sage)-1 end as age 
from student;
使用 timestampdiff 函数:
select      
   student.SId as 学生编号,     
   student.Sname  as  学生姓名,         
   TIMESTAMPDIFF(YEAR,student.Sage,CURDATE()) as 学生年龄 
from student
3、查询本周过生日的学生
select 
  *,     
  week(sage)  as sweek,     
  yearweek(sage) as yweek,     
  EXTRACT(week FROM Sage) as eweek,     
  EXTRACT(week FROM now()) as nweek 
from student  
where EXTRACT(week FROM Sage)=EXTRACT(week FROM now());

关于最后一题,参考答案有误?没考虑可能今年和出生年的周数不同。

待询问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值