我有一个关于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吗? 谢谢你们,我很感激。
答案 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
我无法理解你问题的以下部分:“有第二天的选项”