一直以来,使用mysql,在统计时间差时,都是使用TIME_TO_SEC(timediff(d2,d1))的方式来处理。
今天偶然发现,该用法,存在BUG,例如:
select TIME_TO_SEC(timediff('2014-02-28 10:13:35', '2013-12-28 14:03:37')) as times0, timestampdiff(second, '2014-02-08 14:03:37', '2014-02-28 10:13:35') as times1, TIME_TO_SEC(timediff('2014-02-28 10:13:35', '2014-02-08 14:03:37')) as times2, timestampdiff(second, '2013-12-28 14:03:37', '2014-02-28 10:13:35') as times3
很明显,times0应该等于times3,times1应该等于times2,但是,实际上,times0不等于times3。
进行更多实验,你会发现,TIME_TO_SEC(timediff(d2,d1))的用法,在时间跨度达到一定的情况下,其结果都是3020399。
具体这个跨度最大值是多少,以及为什么会出现这样的结果,有待去考究,暂记备忘。
最后建议大家使用timestampdiff来进行时间差的计算。