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()
来计算基于出生日期的年龄。我们还讨论了在计算年龄时需要考虑闰年的问题,并给出了相应的解决方法。希望本文对您有所帮助!