【问题标题】:Difference in minutes from two time fields in MySQLMySQL中两个时间字段的分钟差
【发布时间】:2011-02-21 19:09:11
【问题描述】:

我使用字段“时间”设置我的 MySQL 数据库

不是传统意义上的HH:MM,它是事件发生的时间,所以一个5分45秒的事件发生在一场比赛还剩5分45秒的时候。 12:25 发生,还剩 12 分 25 秒,以此类推。

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

这可能吗?

提前致谢。

【问题讨论】:

  • 您使用什么数据类型来存储这些值?
  • @Brian 我使用“时间”数据类型,因为没有附加日期。
  • 我也犯了同样的错误。当您稍后进行此类操作时,您不会使用时间类型列。您总是以分钟(十进制)存储以供以后处理,更容易过滤。

标签: mysql time


【解决方案1】:

对我来说这很有效:

TIMESTAMPDIFF(MINUTE, T0.created, T0.modified)

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

【讨论】:

  • 感谢您的回答,我不知道 TIMESTAMPDIFF 存在!
【解决方案2】:

随便用

TIMEDIFF(fromtime, totime):

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

如果您需要小数,请使用TIME_TO_SEC()/3600(它假定您传递了几秒钟,但您存储时间的格式是模糊的,SQL 可能会将它们解释为 HH:MM - 您可以使用 @ 解决此问题可能是987654323@?)——那你可以用TIME_TO_SEC()/60,这样更正确)

【讨论】:

  • 哦,因为您暗示数据库是您自己的设计 - 可能考虑使用 TIMESTAMP 字段或 INTEGER 字段(并在其中存储秒数 - 除以 60 以获得您的 minute.second 十进制值)
【解决方案3】:

我需要类似的。两个有用的函数:TIME_TO_SECSUBTIME

例如如果您的时间字段是正常的 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)

【讨论】:

    【解决方案4】:

    我使用了 UNIX_TIMESTAMP(event1)-UNIX_TIMESTAMP(event2),它为您提供了事件之间的秒数。将其除以 60.0,您将根据您的要求得到一个小数。此解决方案假定您的列是日期兼容的值。如果它们是 TIMESTAMP,它会运行得非常快。

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

    【讨论】:

    • 提问者说他​​们将该字段设置为时间字段。 UNIX_TIMESTAMP 需要日期时间/时间戳字段;不会工作
    猜你喜欢
    • 2014-07-04
    • 1970-01-01
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多