SQL(?):计算两个日期时间值之间的时间

时间:2008-10-14 10:05:25

标签: sql mysql datediff

当我需要仅计算08:00:00-16:00:00之间的时间时,从MySQL获取的两个日期时间值之间的时间计算的最佳方法是什么。

例如,如果我的值为2008-10-13 18:00:00和2008-10-14 10:00:00,则时差应为02:00:00。

我可以用SQL做什么或者最好的方法是什么?我正在建立一个网站并使用PHP。

感谢您的回答。

编辑:确切的是,我正在计算“票”在工作时间内处于特定状态的时间。时间可能是几个星期。

EDIT2:我在计算实际时差方面没有问题,但在每天00:00:00-08:00:00和16:00:00-00:00:00之间减去关闭时间。

-Samuli

3 个答案:

答案 0 :(得分:10)

TIMEDIFF功能

  

TIMEDIFF()返回expr1 - expr2   表示为时间值。 expr1和   expr2是时间或日期和时间   表达式,但两者都必须是   同类型。

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',
    ->                 '2000:01:01 00:00:00.000001');
        -> '-00:00:00.000001'
mysql> SELECT TIMEDIFF('2008-12-31 23:59:59.000001',
    ->                 '2008-12-30 01:01:01.000002');
        -> '46:58:57.999999'

答案 1 :(得分:1)

我认为您应该计算自己代码中的差异,而不是使用更复杂的SQL语句,因为:

  • 这种计算似乎是您业务逻辑的一部分。如果将其与业务代码的其余部分集成,似乎更容易维护。
  • 数据库通常是瓶颈,所以不要加载超过需要的数据库。

答案 2 :(得分:0)

您可能想在PHP中尝试它,但我认为它在DB中会更快

code to return difference in an array