MySQL中的日期差异来计算年龄

时间:2009-09-05 14:54:46

标签: mysql sql date datediff

我对datediff MYSQL函数有疑问,我可以使用它,而且很简单。但我不明白如何使用它来收集表字段内的差异。 E.g。

我有一个列dob,我想编写一个类似

的查询
select dateDiff(current_timeStamp,dob) 
from sometable 'here dob is the table column

我的意思是我想要从当前日期时间到表格字段dob的差异,每个查询结果都是差异,即用户的年龄。

7 个答案:

答案 0 :(得分:20)

你的意思是这样吗?

SELECT DATE_FORMAT(FROM_DAYS(DATEDIFF(NOW(), dob)), "%Y")+0 AS age from sometable

Source

答案 1 :(得分:9)

你可以这样做

SELECT TIMESTAMPDIFF(YEAR, date_of_birth, NOW()) AS年龄FROM your_table

每次都有效。

答案 2 :(得分:1)

如果您愿意,为每个用户显示年龄,请执行

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
       from sometable;

答案 3 :(得分:1)

如果我理解您对先前答案的评论,则出生日期列实际上不是DATE值,而是格式为m / d / y的字符串。我强烈建议你改变这个;它会降低您想要执行的任何日期计算的速度,并且您可能会将无效的日期值输入到列中。

我认为这就是你所需要的。它使用STR_TO_DATE()函数和一个算法来计算MySQL文档中的年龄:

SELECT YEAR(CURDATE()) - YEAR(STR_TO_DATE(dob, '%m/%d/%Y'))
- (RIGHT(CURDATE(), 5) < RIGHT(STR_TO_DATE(dob, '%m/%d/%Y'), 5)) AS age
FROM sometable;

答案 4 :(得分:0)

我认为这应该有帮助

SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0;

注意:以正确的格式给出D.O.B. YYYY-MM-DD'=> '1991-11-11

答案 5 :(得分:0)

试试这个

SELECT DATEDIFF(CURDATE(), '2014-02-14');

答案 6 :(得分:0)

select truncate(datediff(curdate(),dob)/365.25,0) from table;