mysql 在 20 个正确的时差中给出一个错误的时间差
mysql give one wrong timediff out of 20 right
我有以下查询:
SELECT `Time`,
`Resolution`,
HOUR(TIMEDIFF(`Resolution`,`Time`)),
TIMEDIFF(`Resolution`,`Time`),
datediff(`Resolution`,`Time`)
FROM Cases;
为了调试,我在前面加上了没有HOUR的TIMEDIFF,就是为了看看结果有没有不同。我使用 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 中的错误?
非常感谢所有回复。
使用
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:59
到 838:59:59
。 https://dev.mysql.com/doc/refman/5.5/en/time.html
所以你得到了最大可能的价值。
我有以下查询:
SELECT `Time`,
`Resolution`,
HOUR(TIMEDIFF(`Resolution`,`Time`)),
TIMEDIFF(`Resolution`,`Time`),
datediff(`Resolution`,`Time`)
FROM Cases;
为了调试,我在前面加上了没有HOUR的TIMEDIFF,就是为了看看结果有没有不同。我使用 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 中的错误? 非常感谢所有回复。
使用
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:59
到 838:59:59
。 https://dev.mysql.com/doc/refman/5.5/en/time.html
所以你得到了最大可能的价值。