我对datediff
MYSQL函数有疑问,我可以使用它,而且很简单。但我不明白如何使用它来收集表字段内的差异。 E.g。
我有一个列dob
,我想编写一个类似
select dateDiff(current_timeStamp,dob)
from sometable 'here dob is the table column
我的意思是我想要从当前日期时间到表格字段dob
的差异,每个查询结果都是差异,即用户的年龄。
答案 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;