반응형
MySQL 쿼리에서 timediff / time_to_sec 함수를 사용하여 두 날짜-시간 사이의 총 분을 계산합니다.
예 :
2010-03-23 10:00:00
-
2010-03-23 08:00:00
= 120 minutes
내가하고 싶은 것은 선택한 시간 범위 동안 발생하는 모든 휴식을 제외하는 것입니다.
예 :
2010-03-23 10:00:00
-
2010-03-23 08:00:00
-
(break 08:55:00 to 09:10:00)
= 105 minutes
중첩 된 IF 문의 긴 목록에 의존하지 않고이를 수행하는 좋은 방법이 있습니까?
업데이트 1 :
명확히하기 위해-사용자가 주어진 작업을 수행하는 데 걸리는 시간을 계산하려고합니다. 커피를 마시면 해당 시간을 제외해야합니다. 커피 브레이크는 정해진 시간에 있습니다.
해결 방법
시간 동안 발생하는 모든 휴식 시간을 합한 다음 timediff / time_to_sec 함수의 결과로 뺍니다.
SELECT TIME_TO_SEC(TIMEDIFF('17:00:00', '09:00:00')) -- 28800
SELECT TIME_TO_SEC(TIMEDIFF('12:30:00', '12:00:00')) -- 1800
SELECT TIME_TO_SEC(TIMEDIFF('10:30:00', '10:15:00')) -- 900
-- 26100
이 구조 가정 :
CREATE TABLE work_unit (
id INT NOT NULL,
initial_time TIME,
final_time TIME
)
CREATE TABLE break (
id INT NOT NULL,
initial_time TIME,
final_time TIME
)
INSERT work_unit VALUES (1, '09:00:00', '17:00:00')
INSERT break VALUES (1, '10:00:00', '10:15:00')
INSERT break VALUES (2, '12:00:00', '12:30:00')
다음 쿼리로 계산할 수 있습니다.
SELECT *, TIME_TO_SEC(TIMEDIFF(final_time, initial_time)) total_time
, (SELECT SUM(
TIME_TO_SEC(TIMEDIFF(b.final_time, b.initial_time)))
FROM break b
WHERE (b.initial_time BETWEEN work_unit.initial_time AND work_unit.final_time) OR (b.final_time BETWEEN work_unit.initial_time AND work_unit.final_time)
) breaks
FROM work_unit
참조 페이지 https://stackoverflow.com/questions/2502584
반응형
'MySql' 카테고리의 다른 글
MySQL 2D 배열로 결과 집합 (0) | 2020.12.04 |
---|---|
MySQL-선택 후 업데이트 (0) | 2020.12.04 |
MySQL ms excel-2007을 mysql과 연결하는 방법. (0) | 2020.12.04 |
MySQL : 여러 필드에 대한 고유 제한 (0) | 2020.12.04 |
MySQL Connector / J가 Android에서 작동하도록하는 방법은 무엇입니까? (0) | 2020.12.03 |
댓글