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

本篇文章的参考文献:

PART 1:字符串拼接问题mysql 实现字符串的拼接_SmileTimLi的博客-CSDN博客​blog.csdn.net025b4e5ff10b71f9aebb50e3896a4201.pngmysql 实现字符串的拼接_SmileTimLi的博客-CSDN博客​blog.csdn.net025b4e5ff10b71f9aebb50e3896a4201.png

PART 2:有疑问的问题的网上解答(待询问助教/老师)查询本周过生日的学生_qq_20144193的博客-CSDN博客​blog.csdn.nete424f39f411876527f3772820277c1a5.png

练习题来源:Mysql_45道练习题​www.jianshu.com70e6f6a9ea92bf3c99c7677f8975b86b.png在数据库中建数据表:

--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)

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());

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

待询问。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值