【问题标题】:people's age calcuation人的年龄计算
【发布时间】:2019-02-04 05:37:14
【问题描述】:

我有一个名为 person 的表,其中包含 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

所以我不知道我错过了什么,上面的代码可以计算年龄 - 我相信不是很准确,但理想情况下我想以年、月、日计算人们的年龄,例如 Ton 55 年 1一个月3天,还想计算他的下一个生日到期日,例如下一个生日日期:11个月还有10天等

谢谢

【问题讨论】:

  • 您当前使用的TIMESTAMPDIFF 可能是最简洁的方式。它有什么问题?
  • 谢谢,我想要输出,例如汤姆的年龄是 55 岁 1 个月 3 天,下一个生日将是 11 个月 10 天,所以我上面的代码只给了我粗略的年龄(年),而不是年+月+日
  • 您的要求似乎模棱两可。如果某人出生于 6 月 30 日,现在是 8 月 1 日,那么他们的年龄是几月几日?
  • 如果上个月刚生了一个婴儿,那么sql将被计算为她的0岁,这不简洁...
  • @ysth 是的,同意,这就是为什么需要社区的帮助

标签: mysql sql database


【解决方案1】:

您可以按如下方式准确计算年龄:

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)

我相信这可以处理所有边缘情况,例如闰年。它准确地计算到当天的年龄。

我从不喜欢年/月/日,因为我认为定义不清楚。您需要提供您想要的样品。

【讨论】:

    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2017-11-21
    • 2010-10-01
    • 2012-03-26
    • 1970-01-01
    • 2020-12-28
    • 2016-03-20
    • 2011-04-16
    相关资源
    最近更新 更多