mysql - 从出生日期计算带小数的年龄

标签 mysql sql

我的 MySQL 表中有一个类型为 date 的 dob 字段。一个小而简单的例子是这样的:

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) 或 33.02 岁。 使用 SQL 计算此值的最简单方法是什么?

最佳答案

当你想计算没有任何分数的年份时,通常在 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;

关于mysql - 从出生日期计算带小数的年龄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24099562/

相关文章:

asp.net - 尝试使用 MYSql 失败更新 2 个表

python - 数据库事务如何与应用程序代码一起工作

mysql - 删除带有外键的表

MySQL 分组依据与时间差异

sql - Postgres : How to do Composite keys?

php - 使用 PHP 自动删除 vBulletin 用户帐户

php - 我如何优化这些查询?

SQL 服务器 : backup all databases

sql - 在 SQL 语句中调用函数

mysql - 2013 error Lost connection to MySQL server during query 错误