是的,曾经有人提出过非常相似的要求,但请忍受。

现在,人们考虑到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

10-04 22:04
查看更多