2014-03-12 21 views
0

我有一个关于MySQL日期/时间函数的问题。现在,我有查询,看起来像这样:在上午6点和晚上10点之后计算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列时间戳,第一个是“开始”,第二个是“结束”。我想在单个查询中执行的是这样的:我想返回开始时间和上午6点之间的时间差+多少时间差在晚上10点和结束之间(选择nex日期...)。我需要这个夜班小时 - 所以我需要结合夜班小时的总和。

实施例:

开始= 2014年2月26日3时三十分00秒

端= 2014年2月26日12点16分59秒

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

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

回答

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

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

+0

这正是我一直在寻找的。它效果很好。第二天的选择是这样的:如果在某些情况下,结束时间是“00:05”,那么在午夜五分钟后,enddiff必须是2:05小时,所以在同一天的2小时加上5分钟。 –

相关问题