我使用'time'字段设置我的MySQL数据库
传统意义上不是HH:MM,它是事件发生的时间,因此在游戏中还剩5分45秒时发生值为5:45的事件。 12:25发生了12分25秒,等等。
我希望能够找出已经过去的总时间,所以如果我的事件发生在12:25而下一个事件发生在5:45,我希望能够得到差异,这将是等于6:40。然后,我想将其表示为小数,在本例中为6.67。
这可能吗?
提前致谢。
答案 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_SEC和SUBTIME。
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,它将非常快速地工作。
更新:此解决方案仅适用于时间戳数据类型,而不适用于原始问题中的时间数据类型。