【问题标题】:How to get the difference between two dates rounded to hours如何将两个日期之间的差异四舍五入到小时
【发布时间】:2010-09-01 19:26:22
【问题描述】:

我将在下面的示例中说明我想得到什么:

'2010-09-01 03:00:00' - '2010-09-01 00:10:00'

使用TIMEDIFF(),我们得到 2 作为结果。这意味着,它没有考虑剩下的 50 分钟。

在这种情况下,我想要得到的是:50(分钟)/60 = 0.83 周期。因此,结果应该是 2.83 而不是 2。

【问题讨论】:

  • 您要转换为整数吗?你应该得到一个时间结果,比如'2:50:00'。

标签: sql mysql


【解决方案1】:
select time_to_sec(timediff('2010-09-01 03:00:00', '2010-09-01 00:10:00' )) / 3600;

+-----------------------------------------------------------------------------+
| time_to_sec(timediff('2010-09-01 03:00:00', '2010-09-01 00:10:00' )) / 3600 |
+-----------------------------------------------------------------------------+
|                                                                      2.8333 | 
+-----------------------------------------------------------------------------+

【讨论】:

  • timediff 解决方案有一个问题:它的值不能超过 839 小时(减去 1 秒)。因此,超过 ~35 天将无法找到差异
  • 因此我遇到了一个错误。此解决方案不可靠。
【解决方案2】:

我认为更完整的答案是

select time_format(timediff(onedateinstring,anotherdateinstring),'%H:%i:%s')

这允许您以您想要的格式查看小时、分钟、秒等...

关于time_format的更多信息:http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_time-format

【讨论】:

    【解决方案3】:

    使用 TIMESTAMPDIFF 获取确切的小时数:

    SELECT 
          b.`Start_Date`, 
          b.`End_Date`, 
          TIMESTAMPDIFF(HOUR, b.`Start_Date`, b.`End_Date`) AS `HOURS` 
    FROM my_table b;
    

    【讨论】:

      【解决方案4】:

      您可以尝试以下方法:

      time_format(timediff(max(l.fecha), min(l.fecha) ),'%H:%m') //Hora y minutos
      

      【讨论】:

      • 英文版。 Su ayuda se agradece, pero por喜爱, tratar de publicar las respuestas en Inglés。
      • 它的重要部分是(没有 hablo espan~ol,但我理解 hsi 的答案):-/
      • 您在错误的社区转发,但您的意图仍然受到赞赏。 Tome su voto 一个忙。
      • 工作得很好,除了在我至少使用的版本(5.7)中,它是 '%i' 分钟,而不是 '%m':w3schools.com/sql/func_mysql_time_format.asp
      【解决方案5】:

      这是一个非常古老的线程,但您也可以尝试使用 TIMESTAMPDIFF 并将 MINUTE、HOUR、SECONDS 作为限定符。

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

      【讨论】:

        【解决方案6】:

        MySQL 获取时间戳之间的小时数:

        select timestampdiff(second,'2010-09-01 00:10:00', '2010-09-01 03:00:00')/3600;
        

        【讨论】:

        • 为什么不timestampdiff(hour,'2010-09-01 00:10:00', '2010-09-01 03:00:00')
        • 不考虑分钟数。您建议的返回答案为 2,而上述解决方案给出 2.83(0.83 小时是 50 分钟的差异)
        【解决方案7】:

        如果您使用时间戳,这可能是 MySQL 中使用 SQL 的解决方案。

        SELECT TIMESTAMPDIFF(HOUR, '2010-11-29 13:13:55', '2010-11-29 13:16:55') as newtable;
        
        | newtable |
        
        7
        
        1 row in set (0.01 sec)
        

        【讨论】:

          【解决方案8】:
          SELECT ABS(TIME_TO_SEC(TIMEDIFF('2010-09-01 03:00:00', '2010-09-01 00:10:00')) / 3600)
          

          结果:2.8333

          【讨论】:

          • 嗨!请拨打tour。感谢您的回答,但您能否添加关于您的代码如何解决问题的说明?
          【解决方案9】:

          使用 UNIX_TIMESTAMP:

          SELECT (UNIX_TIMESTAMP(End)-UNIX_TIMESTAMP(Start))/3600
          AS Difference_in_hours 
          FROM Table
          

          【讨论】:

            猜你喜欢
            • 2019-05-31
            • 1970-01-01
            • 1970-01-01
            • 2018-06-17
            • 2021-12-15
            • 2015-02-04
            • 2022-01-13
            • 2013-10-17
            相关资源
            最近更新 更多