2014-03-12 3 views
0

MySQL의 날짜/시간 함수에 관한 한 가지 질문이 있습니다. 지금, 나는 다음과 같다 쿼리가 있습니다 MySQL에서 오전 6시와 오후 10시 이전에 시차를 계산합니다.

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 쿼리에서 실행하고자하는 것은 다음과 같습니다. 시작과 6am의 시간 차이가 얼마인지를 반환하고 싶습니다. 10pm과 end 사이의 시간 차이는 얼마입니까 (nex day 옵션 포함). 야간 근무 시간에는이 시간이 필요합니다 - 결과적으로 밤 시간대의 합계가 필요합니다.

예 :

시작 = 2014년 2월 26일 3시 30분 0초

끝 = 2014년 2월 26일 12시 16분 59초

나는 시작의 차이를 좀하고 싶습니다 그리고 6am와 10pm 그리고 끝. 이 경우 : 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"인 경우 자정에서 5 분 후 enddiff는 2:05 시간이어야하므로 같은 날의 2 시간에 5 분을 더한 것입니다. . –