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

SQL(?):计算两个日期时间值之间的时间,sql,mysql,datediff,Sql,Mysql,Datediff,当我只需要计算08:00:00-16:00:00之间的时间时,计算从MySQL获取的两个datetime值之间的时间的最佳方法是什么 例如,如果我有值2008-10-13 18:00:00和2008-10-14 10:00:00,则时差应为02:00:00 我可以用SQL来做吗?或者最好的方法是什么?我正在建立一个网站,并使用PHP 谢谢你的回答 编辑:确切地说,我是在计算一张“票”在工作时间内处于特定状态的时间。时间可能是几周 EDIT2:我在计算实际时差时没有问题,但要减去休息时间,每天00

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

例如,如果我有值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

函数

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


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


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

  • 这种计算似乎是您业务逻辑的一部分。如果将其与业务代码的其余部分集成,那么维护起来似乎更容易
  • 数据库通常是瓶颈,因此不要过度加载
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'