一道关于生日计算的简单mysql题目
2023-07-21 本文已影响0人
我住永安当
一看到有关日期的题目,无论是否复杂,都有些头痛。这部分的函数很多,不熟悉。
今天做到一个简单的题目:
要求:1、查询各学生的年龄
2、字段要求及顺序:学号(sid)、姓名(sname)、年龄
![](https://img.haomeiwen.com/i14058594/b62e37dc51703cda.png)
标准答案(会造成误差)
select
sid
,sname
,year(curdate())-year(sage) as age
from student;
两种实现需求的mysql查询语句如下:
select
sid
,sname
,if(month(curdate())-month(sage)>0,year(curdate())-year(sage),year(curdate())-year(sage)-1) as age
from student;
#思路比较简单:
#判断如果当前日期的月份大于出生日期的月份,则直接用年份相减。
#如果当前日期的月份小于出生日期的月份,则用年份想减得到的差还要减1才能得到年龄。
![](https://img.haomeiwen.com/i14058594/2915e27f3c7d6cf4.png)
![](https://img.haomeiwen.com/i14058594/7ef86cbad9cbf60c.png)
另一个方法的思路是来自于根据出生日期计算年龄。这里的出生日期大都在1990年,因此不存在from_days()中的参数为负数的情况,可以直接使用。
select
sid,
sname,
year(from_days(datediff(curdate(), date(sage)))) as age
from
student;
![](https://img.haomeiwen.com/i14058594/5bf7c1dd85f0ef00.png)
![](https://img.haomeiwen.com/i14058594/9aee8566e22bb533.png)