在mysql中计算出生日期的年龄

时间:2014-02-19 21:47:51

标签: mysql sql

我在mysql中有一个表,其中出生日期列保存为unix时间戳(bigint)。

我想写这样的查询:

SELECT ... as `age` FROM `tableName`

SELECT * FROM `tableName` WHERE ... > 30

当3个点是从出生日算起年龄的函数。

我知道函数TIMESTAMPDIFF,但如果我将出生日期保存为unix时间戳,那就不好了。

我该怎么办?

由于

4 个答案:

答案 0 :(得分:4)

从MySQL的date and time functions,我们可以合并TIMESTAMPDIFFNOWFROM_UNIXTIME

假设dob是表示出生日期的Unix时间戳:

 TIMESTAMPDIFF(YEAR, FROM_UNIXTIME(dob), NOW())

从那里开始,根据列值添加WHERE子句非常简单。

Live demo on SQLFiddle.

答案 1 :(得分:1)

SELECT FLOOR((unix_timestamp() - birthday)/(86400*365)) AS age FROM table;

答案 2 :(得分:0)

您可以分别使用YEAR和MONTH函数获取时间戳的年份和月份:

SELECT from_unixtime(birthdate),FLOOR((YEAR(CURDATE())*12+MONTH(CURDATE()) -(YEAR(from_unixtime(birthdate))*12+MONTH(from_unixtime(birthdate)))) / 12) as age FROM `table1` 

这里是sqlfiddle

答案 3 :(得分:0)

使用PERIOD_DIFF并让MySQL处理闰年和其他时间的差异。你说年龄,所以我假设年/月足够好。

select period_diff(from_unixtime(1196440219, "%Y%m"), from_unixtime(1099440219, "%Y%m"))

返回36个月;

转换为年份的简单练习:)

还可以使用timestampdiff。需要对unix时间戳进行相同的样式解析

select timestampdiff(YEAR, from_unixtime(1099440219, "%Y-%m-%d"), from_unixtime(1196440219, "%Y-%m-%d"))

谢谢!