MySQL中两个时间字段的分钟差异

时间:2011-02-21 19:09:11

标签: mysql time

我使用'time'字段设置我的MySQL数据库

传统意义上不是HH:MM,它是事件发生的时间,因此在游戏中还剩5分45秒时发生值为5:45的事件。 12:25发生了12分25秒,等等。

我希望能够找出已经过去的总时间,所以如果我的事件发生在12:25而下一个事件发生在5:45,我希望能够得到差异,这将是等于6:40。然后,我想将其表示为小数,在本例中为6.67。

这可能吗?

提前致谢。

4 个答案:

答案 0 :(得分:27)

只需使用

TIMEDIFF(fromtime, totime):

SELECT TIMEDIFF("12:25", "5:45");

如果你需要一个小数,请使用TIME_TO_SEC()/3600(它假设你传递了几秒钟,但你存储时间的格式是模糊的,SQL可能会将它们解释为HH:MM - 你可以解决这个问题可能使用CONCAT("00:",MinuteSecondField)?) - 那么你可以使用TIME_TO_SEC()/60,这更正确)

答案 1 :(得分:20)

对我来说这很有效:

throwIO :: Exception e => e -> IO a

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

答案 2 :(得分:17)

我需要类似的。两个有用的功能:TIME_TO_SECSUBTIME

e.g。如果你的时间字段是正常的HH:MM次,那么

SELECT (TIME_TO_SEC(end_time) - TIME_TO_SEC(start_time))/60 AS `minutes` 

在你的情况下,据我所知,时间是倒退的,即。 12:00<6:00所以你的end_time和start_time需要交换。

如果您想要输出HH:MM:SS,则可以

SELECT SUBTIME(end_time, start_time)

答案 3 :(得分:2)

我使用了UNIX_TIMESTAMP(event1)-UNIX_TIMESTAMP(event2),它在事件之间提供了几秒钟。除以60.0,您将根据您的要求得到小数。此解决方案假设您的列是与日期兼容的值。如果它们是TIMESTAMP,它将非常快速地工作。

更新:此解决方案仅适用于时间戳数据类型,而不适用于原始问题中的时间数据类型。