在MySQL中计算时间差在早上6点之前和晚上10点之后

时间:2014-03-12 08:17:58

标签: mysql sql function timestamp difference

我有一个关于MySQL日期/时间函数的问题。现在,我的查询看起来像这样:

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(sum)))
FROM workingtime
WHERE user='magdalena'
AND type='work'
AND start BETWEEN '2014-03-01' AND '2014-03-12'
AND completed=1

所以在我的数据库中有2列带有时间戳,第一列是"开始"第二列是"结束"。我想在sigle查询中执行的是:我想返回开始和早上6点之间的时差+晚上10点和结束之间的时差多少(有nex日期的选项......)。我需要这个夜班时间 - 所以我需要一起整夜的夜班时间。

示例:

start = 2014-02-26 03:30:00

end = 2014-02-26 12:16:59

我想在开始和早上6点和晚上10点之间得到区别并结束。 在这种情况下:3:30:00到6:00:00之间的差异是2:30:00。在这种情况下,晚上10点到结束之间的差异并不是什么,因为结束时间根本不会超过晚上10​​点。所以在这种情况下的结果将是2:50:00。这是我想要的输出。

这只能用MySQL吗? 谢谢你们,我很感激。

1 个答案:

答案 0 :(得分:1)

使用可以使用TIMEDIFF功能,如下所示:

select 
  CONCAT(HOUR(TIMEDIFF(starttime, CONCAT(DATE(starttime),' 06:00:00'))), ':', MINUTE(TIMEDIFF(starttime, CONCAT(DATE(starttime),' 06:00:00')))) AS startdiff,
  CONCAT(HOUR(TIMEDIFF(CONCAT(DATE(endtime),' 22:00:00'), endtime)), ':', MINUTE(TIMEDIFF(CONCAT(DATE(endtime),' 22:00:00'), endtime))) AS enddiff
from workingtime

工作演示:http://sqlfiddle.com/#!2/fc621/1

我无法理解你问题的以下部分:“有第二天的选项”