从出生日期开始计算带小数的年龄

时间:2014-06-07 16:59:20

标签: mysql sql

我的MySQL表中有一个dob字段,类型为date。只是一个小的,微不足道的例子是这样的:

mysql> select dob from players limit 5;
+------------+
| dob        |
+------------+
| 1983-12-02 |
| 1979-01-01 |
| 1989-05-11 |
| 1976-03-24 |
| 1989-09-12 |
+------------+

我正在尝试使用今天的日期计算带小数点的年龄。所以从技术上讲,如果你的生日是1981年6月1日或1981-06-01,这将使你33岁,今天是6月7日..你将33.(6/365) or 33.02 years old.使用SQL计算这个的最简单方法是什么?

4 个答案:

答案 0 :(得分:5)

通常,当您想要计算没有任何分数的年份时,在mysql中进行DOB计算非常容易

mysql> select timestampdiff(YEAR,'1981-06-01',now());
+----------------------------------------+
| timestampdiff(YEAR,'1981-06-01',now()) |
+----------------------------------------+
|                                     33 |
+----------------------------------------+

但是既然你需要这个分数,那么这应该可以做到这一点

mysql> select format(datediff(curdate(),'1981-06-01') / 365.25,2);
+-----------------------------------------------------+
| format(datediff(curdate(),'1981-06-01') / 365.25,2) |
+-----------------------------------------------------+
| 33.02                                               |
+-----------------------------------------------------+

年度被视为365.25天。

因此,在您的情况下,您可以将查询作为

select 
format(datediff(curdate(),dob) / 365.25,2) as dob 
from players limit 5;

答案 1 :(得分:1)

您可以使用to_days功能计算零年与某人生日之间的天数。然后从今天减去那天数。这应该给你生日,好像有人出生在零年:

select  year(subdate(now(), to_days(dob)))

Example at SQL Fiddle.

答案 2 :(得分:1)

您最好的选择是使用DATEDIFF(),如下所示:

  

select datediff(NOW(),date("1983-12-02"))/365;

其中引用日期是您的日期字段,因此您的示例将转换为:

  

select datediff(NOW(),date(dob))/365 from players limit 5;

返回的结果将是从出生日期到4位小数的年数。 如果您更喜欢两个小数位,请使用truncate(),如下所示:

  

truncate(datediff(NOW(),date("1983-12-02"))/365,2);

答案 3 :(得分:1)

有几个问题。您使用365作为一年中的天数并忽略闰年。 最简单的方法是

select datediff( now(), '1981-06-01' )/365.25;

当你使用365.25它会传播闰年,你应该没事。 MySQL说这个值是33.0157。当你把它四舍五入到两位小数时,你应该没问题。