mysql给出了20个错误的timediff

时间:2017-05-17 14:12:10

标签: mysql datediff timedelta

我有以下查询:

SELECT `Time`,
    `Resolution`,
    HOUR(TIMEDIFF(`Resolution`,`Time`)), 
    TIMEDIFF(`Resolution`,`Time`), 
    datediff(`Resolution`,`Time`) 
FROM Cases;

为了进行调试,我之前添加的TIMEDIFF没有HOUR,只是为了查看结果是否不同。我使用datediff来仔细检查。

查询结果为:

+---------------------+---------------------+-------------------------------------+-------------------------------+-------------------------------+
| Time                | Resolution          | HOUR(TIMEDIFF(`Resolution`,`Time`)) | TIMEDIFF(`Resolution`,`Time`) | datediff(`Resolution`,`Time`) |
+---------------------+---------------------+-------------------------------------+-------------------------------+-------------------------------+
| 2017-01-10 13:35:00 | 2017-01-24 10:52:00 |                                 333 | 333:17:00                     |                            14 |
| 2017-01-12 15:53:00 | 2017-02-21 16:06:00 |                                 838 | 838:59:59                     |                            40 |
| 2017-01-18 09:19:00 | 2017-01-18 13:39:00 |                                   4 | 04:20:00                      |                             0 |
| 2017-01-23 09:00:00 | 2017-01-23 15:08:00 |                                   6 | 06:08:00                      |                             0 |
| 2017-01-24 08:49:00 | 2017-02-20 14:34:00 |                                 653 | 653:45:00                     |                            27 |

实际上,它提供了更多的线路,但相关的线路是2个结果 - 838个小时,相当于34.91天,比方说35个,但是DATEDIFF给出40个,当你自己做计算时它是40天! 1月12日至2月21日。

所有其他21项结果都是正确的。

知道为什么吗? mysql中的一个bug? 所有回复都受到高度赞赏。

1 个答案:

答案 0 :(得分:2)

使用

TIMESTAMPDIFF(HOUR,`Time`, `Resolution`)

代替。

它也无需使用HOUR()

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timestampdiff

TIMEDIFF()返回的结果仅限于TIME值允许的范围。 https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_timediff

TIME值的范围可以从-838:59:59838:59:59https://dev.mysql.com/doc/refman/5.5/en/time.html

所以你获得了最大可能值。