MySQL 计算基于出生日期的年龄

MySQL 计算基于出生日期的年龄

阅读更多:MySQL 教程

引言

计算年龄是使用MySQL时一个常见的需求。本文将介绍如何使用 MySQL 函数 DATEDIFF()YEAR() 来计算基于出生日期的年龄。

准备

在开始之前,首先我们需要创建一张包含出生日期的表(这里以名为 person 的表为例):

CREATE TABLE person (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  dob DATE NOT NULL,
  PRIMARY KEY (id)
);

INSERT INTO person (name, dob) VALUES
  ('张三', '1990-01-01'),
  ('李四', '2000-12-31'),
  ('王五', '1985-05-10');

我们可以查询一下表来确认数据成功插入:

SELECT * FROM person;

输出结果应该如下所示:

+----+------+------------+
| id | name | dob        |
+----+------+------------+
|  1 | 张三 | 1990-01-01 |
|  2 | 李四 | 2000-12-31 |
|  3 | 王五 | 1985-05-10 |
+----+------+------------+

计算年龄

通过 DATEDIFF() 函数,我们可以计算出从出生日期到现在的天数。然后,通过除以 365 (或者 366)天,我们可以得到大约的年龄。例如:

SELECT name, DATEDIFF(NOW(), dob) / 365 AS age
FROM person;

输出结果应该如下所示:

+------+-----+
| name | age |
+------+-----+
| 张三 |  31 |
| 李四 |  21 |
| 王五 |  36 |
+------+-----+

然而,这里有一个问题:通过简单地除以 365 得到的年龄并不完全准确。如果一个人在闰年(2 月 29 日)出生,那么他(她)的年龄可能会少算一年。为了解决这个问题,我们需要根据出生日期判断他(她)是否已经过了今年的生日。如果过了,那么年龄就加一。我们可以使用 DATE_FORMAT()YEAR() 函数来实现这个判断。例如:

SELECT name, YEAR(NOW()) - YEAR(dob) - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) AS age
FROM person;

这里的 (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(dob, '00-%m-%d')) 是一个布尔表达式,表示如果今年的生日还没过,那么它的值为 true,否则为 false。将它与 YEAR(NOW()) - YEAR(dob) 相减即可得到完整的年龄。输出结果应该如下所示:

+------+-----+
| name | age |
+------+-----+
| 张三 |  31 |
| 李四 |  22 |
| 王五 |  36 |
+------+-----+

总结

在本文中,我们介绍了如何使用 MySQL 函数 DATEDIFF()YEAR() 来计算基于出生日期的年龄。我们还讨论了在计算年龄时需要考虑闰年的问题,并给出了相应的解决方法。希望本文对您有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程