我试图计算一个人在数据库中的年龄.
我们假设有这个简单的表格:
student(id, birth_date);
Run Code Online (Sandbox Code Playgroud)
其中id是主键(实际上表格更复杂但我简化了它).
我想知道一个人多大年纪:
select id, datediff(curdate(),birth_date)
from student
Run Code Online (Sandbox Code Playgroud)
但是它会在几天内返回结果,而不是几年.我可以将它除以365:
select id, datediff(curdate(),birth_date) / 365
from student
Run Code Online (Sandbox Code Playgroud)
但它返回一个浮点值,我想要一个整数.
所以我可以计算年数:
select id, year(curdate())-year(birth_date)
from student
Run Code Online (Sandbox Code Playgroud)
但是有一个问题:比如现在是5月,如果一个人在1970年6月出生的战争他还有31年而不是32岁,但表达式返回32.
我不能摆脱这个问题,有人可以帮我吗?
Rat*_*lle 70
对于遇到此问题的人:
另一种方法是:
SELECT TIMESTAMPDIFF(YEAR, date_of_birth, CURDATE()) AS difference FROM student
Run Code Online (Sandbox Code Playgroud)
在几个月的差异,更换YEAR用MONTH,日子替换YEAR用DAY
希望有所帮助!
Sco*_*ner 16
select id, floor(datediff(curdate(),birth_date) / 365)
from student
Run Code Online (Sandbox Code Playgroud)
将结果放在一个整数怎么样?
接受的答案几乎是正确的,但可能会导致错误的结果。
事实上,/ 365不考虑闰年,如果您比较与出生日期具有相同日期和月份的日期,可能会导致错误的结果。
为了更准确,您必须将其除以 4 年的平均天数,即 (365 * 4) + 1(每 4 年的闰年)=> 365.25
而且你会更准确:
select id, floor(datediff(curdate(),birth_date) / 365.25) from student
Run Code Online (Sandbox Code Playgroud)
对我的一个项目进行了测试,它正在工作。
| 归档时间: |
|
| 查看次数: |
43250 次 |
| 最近记录: |