MySQL从出生日期算起的年龄-TIMESTAMPDIFF()

MySQL从出生日期算起的年龄-TIMESTAMPDIFF(),mysql,sql,date,timestamp,Mysql,Sql,Date,Timestamp,是的,以前也有人问过类似的问题,但请耐心听我说 现在,考虑到闰年之类的因素,人们想出了许多函数来确定从出生日期算起的准确年龄。但是,提供了一个非常简单的解决方案: 选择TIMESTAMPDIFF(YEAR,dob,CURDATE())作为年龄 这似乎适用于我所有的约会。但是,文档中没有说明这一点的正确性,也没有说明它是如何计算差异的。它似乎比简单的diff/365.25更聪明 以下是一些例子: ('1992-08-12', '3009-08-12') => 1017 - Correct (

是的,以前也有人问过类似的问题,但请耐心听我说

现在,考虑到闰年之类的因素,人们想出了许多函数来确定从出生日期算起的准确年龄。但是,提供了一个非常简单的解决方案:

选择TIMESTAMPDIFF(YEAR,dob,CURDATE())作为年龄

这似乎适用于我所有的约会。但是,文档中没有说明这一点的正确性,也没有说明它是如何计算差异的。它似乎比简单的
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年左右,你应该觉得使用它是安全的:)


如果文件上说它计算了差异,而您的所有测试都证实了这一点,您为什么对此表示怀疑?如果有警告的话,我想它会这么说。它可能使用了类似于这里的算法:@Barmar,因为它在网络上的其他帖子中被广泛忽略,而倾向于更大更复杂的算法。我的测试不是决定性的(我不知道测试什么)。仅仅因为它在文档中并不意味着它是完全准确的,存在缺陷,他们可能会认为“它足够好”,但我的“足够好”是不同的。我喜欢事实,而不是猜测。@GeorgeReith,如果你想100%肯定地打开并浏览mysql源代码。@peterm我不使用
C
C++
,关键是我不知道什么构成了一个完全精确的算法(日期很复杂,有这么多不同的日历,教皇删除日期等等)-完全不可行。仅仅列出要测试的日期就足够了,这些信息必须在某处,人们必须为日期函数编写测试套件。
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.