•需求说明:
–查询学生出生日期,计算出每个学生的年龄。如果学生年龄大于等于18岁,输出“恭喜,你已经是成年人了。”,否则显示“希望你早日长大。”
思路:
•获得学生出生日期
–计算年龄
–判断年龄是否大于18岁
–输出相关信息
•关键代码:
–出生日期至当前日期的总天数
•DATEDIFF(DY, BornDate, GETDATE())
–获得出生日期至当前日期的周岁
•FLOOR(DATEDIFF(DY,BornDate,GETDATE())/365)
--查询学生出生日期,计算出每个学生的年龄。如果学生年龄大于等于18岁,输出“恭喜,你已经是成年人了。”,否则显示“希望你早日长大。
select StuName as '学生姓名', StuBornDate as '出生日期',datediff(yy,StuBornDate,getdate()) as '年龄', '是否成年'=case
when datediff(yy,StuBornDate,getdate())>=18 then '恭喜,你已经成年了!'
else '希望你早日长大!'
end
from dbo.Student
当然,如果是用datediff(yy,StuBornDate,getdate())来获取年龄是很不准确的做法的,那么,我可以是用floor()函数来求解,首先我获取从当前日期到出生日期之间的所有天数DATEDIFF(DY,BornDate,GETDATE()),每年按365天计算DATEDIFF(DY,BornDate,GETDATE())/365得到一个小数的年份,当然我们习惯使用四舍五入的方法秋取整数,所以•FLOOR(DATEDIFF(DY,BornDate,GETDATE())/365) 求出年的整数。那么上段代码可以改成
--查询学生出生日期,计算出每个学生的年龄。如果学生年龄大于等于18岁,输出“恭喜,你已经是成年人了。”,否则显示“希望你早日长大。
select StuName as '学生姓名', StuBornDate as '出生日期',floor(datediff(day,StuBornDate,getdate())/365) as '年龄', '是否成年'=case
when floor(datediff(day,StuBornDate,getdate())/365)>=18 then '恭喜,你已经成年了!'
else '希望你早日长大!'
end
from dbo.Student
是不是更加严谨了??