8

我有一个关于datediffMYSQL函数的问题,我可以使用它,它很简单。但我不明白如何使用它来收集表字段中的差异。例如

我有一个专栏dob,我想写一个查询来做类似的事情

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

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

4

7 回答 7

21

你的意思是这样吗?

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

来源

于 2009-09-05T15:17:22.877 回答
11

你可以这样做

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

每次都有效。

于 2014-03-11T06:57:01.403 回答
1

如果你想,对于每个用户,显示年龄,做

select name,extract(year from (from_days(dateDiff(current_timestamp,dob)))) 
       from sometable;
于 2009-09-05T15:21:09.860 回答
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;
于 2009-09-05T21:06:45.167 回答
0

我认为这应该有帮助

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

注意:以正确的格式提供 DOB,例如YYYY-MM-DD'=> '1991-11-11

于 2013-09-02T14:02:00.770 回答
0

试试这个

SELECT DATEDIFF(CURDATE(), '2014-02-14');
于 2015-08-15T11:12:31.180 回答
0
select truncate(datediff(curdate(),dob)/365.25,0) from table;
于 2016-05-17T14:15:20.723 回答