是的,曾经有人提出过非常相似的要求,但请忍受。
现在,人们考虑到leap年和其他因素,想出了许多功能来确定从出生日期起的准确年龄。但是MySQL documentation提供了一个非常简单的解决方案:SELECT TIMESTAMPDIFF(YEAR, dob, CURDATE()) AS age
这似乎适用于我提出的所有日期。但是,文档没有说明此方法的正确性或如何计算差异。它似乎比简单的diff/365.25
聪明。
这里有一些例子:
('1992-08-12', '3009-08-12') => 1017 - Correct
('1992-08-12', '3009-08-11') => 1016 - Correct
('1992-02-29', '3009-03-01') => 1017 - Correct
('1992-02-29', '3009-02-28') => 1016 - Correct
对我来说看起来很正确,这是很长一段时间的累积,可能会出现一些小的错误计算。
我对您的问题是,使用它安全吗?您可以提供一组日期,以得出错误的结果吗? (对小于一天的单位不感兴趣)
最佳答案
已经有bug了,但是如果您说最新的MySQL版本是6年左右,则应该放心使用它:)
some earlier bugs e.g. month diff of dates:
TS1 = '2006-01-21 19:52:05'
TS2 = '2007-01-21 18:30:14'
which gave 0, and not 12.
http://bugs.mysql.com/bug.php?id=16697
http://bugs.mysql.com/bug.php?id=25994