计算MySQL中的年龄(InnoDb)

use*_*142 59 mysql sql

如果我将一个人的出生日期存储在表格中的表格中,dd-mm-yyyy并且我从当前日期中减去它,那么返回的日期是什么格式?

如何使用此返回格式计算某人的年龄?

Gla*_*vić 215

你可以使用TIMESTAMPDIFF(unit, datetime_expr1, datetime_expr2)功能:

SELECT TIMESTAMPDIFF(YEAR, '1970-02-01', CURDATE()) AS age
Run Code Online (Sandbox Code Playgroud)

演示

  • 小巧,精确,简便的解决方案. (9认同)
  • 这似乎是明显的赢家.我不知道为什么有人会因为将日期转换为字符串等复杂且容易出错的方法而烦恼. (3认同)
  • 最佳解决方案,但在本页末尾很难找到。 (3认同)

OMG*_*ies 55

如果值存储为DATETIME数据类型:

SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(dob) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(dob, 5)) as age 
  FROM YOUR_TABLE
Run Code Online (Sandbox Code Playgroud)

考虑闰年时不太精确:

SELECT DATEDIFF(CURRENT_DATE, STR_TO_DATE(t.birthday, '%d-%m-%Y'))/365 AS ageInYears
  FROM YOUR_TABLE t 
Run Code Online (Sandbox Code Playgroud)

  • 官方MySQL文档中有正确的答案:http://dev.mysql.com/doc/refman/5.0/en/date-calculations.html (32认同)
  • @OMG小马我很抱歉,但假设一年365天都无法给出正确的年龄计算.例如,对于一个40岁的人,您将在该人生日后的10天内给出错误的年龄. (3认同)

Nic*_*ssu 10

select *,year(curdate())-year(dob) - (right(curdate(),5) < right(dob,5)) as age from your_table
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以考虑出生的月份和日期,以便更准确地计算年龄.

  • 我会做出一项重大修改。在我的 MySQL right(dob,5) 上返回日期的小时-分钟部分。这可以通过使用“year(curdate())-year(dob) - (dayofyear(curdate()) &lt; dayofyear(dob)) asage”来解决,我觉得dayofyear更优雅。 (2认同)

Fer*_*oda 8

SELECT TIMESTAMPDIFF (YEAR, YOUR_COLUMN, CURDATE()) FROM YOUR_TABLE AS AGE
Run Code Online (Sandbox Code Playgroud)

点击进行演示 ..

简约而优雅..


lob*_*234 5

select floor(datediff (now(), birthday)/365) as age
Run Code Online (Sandbox Code Playgroud)