我有一个表,该表具有id,name,dob 3列, 示例数据如下:
INSERT INTO person(id,name,dob) VALUES
(1,'Ton','1964-01-02'),
(2,'Luck','1960-01-20').....
select
name, dob,
current_timestamp() as curren_date,
timestampdiff(year, dob, curdate()) as age,
timestampdiff(month, dob, curdate()) as age,
timestampdiff(day, dob, curdate()) as age,
date_format(dob, '%m'),
month(curdate()),
timestampdiff(month, date_format(dob, '%m'),month(curdate())),
DATEDIFF(dob, curdate()) AS DateDiff
from
person
所以我不知道自己想念什么,上面的代码可以以年为单位计算年龄,我认为不是很准确,但是理想情况下,我想以年,月,日为单位计算人们的年龄,例如吨55岁1 3个月,还想计算他的下一个生日到期日,例如,下一个生日:还剩11个月10天,等等
谢谢
答案 0 :(得分:0)
您可以准确地计算出年龄(岁):
select (case when date_format(dob, '%m-%d') >= date_format(now(), '%m-%d')
then year(now()) - year(dob)
else year(now()) - year(dob) - 1
end)
我相信这可以处理所有极端情况-例如leap年。它可以准确地统计到一天的年龄。
我从来不喜欢几年/几个月/几天,因为我认为定义不清楚。您将需要提供所需样本。