Расчет времени отпуска - как показать правильное время вместо ограничения значения времени mysql 838:59:59
В этом случае у меня есть работник, который имеет 1 год отпускных дней (около 360 дней):
+--------+---------+---------+-------------+---------+-----------+ |ID_LEAVE|ID_WORKER| BEGIN_DATE | END_DATE | +--------+---------+---------+---------+------------+------------+ | 4 | 26 |2019-03-19 07:00:00 |2020-03-19 15:00:00 | +--------+---------+---------+----------------------+------------+
Когда я собираюсь запустить команду Mysql ("что вы пробовали"), которая вычисляет время отпуска (без выходных и праздников), то она показывает примерно так:
+--------+---------+---------+-------------+---------+----------+----------+ |ID_LEAVE|ID_WORKER| BEGIN_DATE | END_DATE |LEAVE TIME| +--------+---------+---------+---------+------------+-----------+----------+ | 4 | 26 |2019-03-19 07:00:00 |2020-03-19 15:00:00 |838:59:59 | +--------+---------+---------+----------------------+-----------+----------+
А это примерно в 838:59:59... 35 дней.
У меня с этим проблемы. Можно ли точно рассчитать время отпуска (от 1 года в формате чч:мм:СС)? Заранее благодарю вас за любой ответ.
Что я уже пробовал:
Я пытался:
SELECT leaves.ID_LEAVE, leaves.ID_WORKER, workers.IMIE, workers.NAZWISKO, leaves.BEGIN_DATE, leaves.END_DATE, TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(TIMEDIFF(TIME(leaves.END_DATE), TIME(leaves.BEGIN_DATE))))), '%H:%i:%s') AS 'LEAVE TIME' FROM (SELECT ADDDATE('1970-01-01', t4 * 10000 + t3 * 1000 + t2 * 100 + t1 * 10 + t0) AS date_value FROM (SELECT 0 t0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t0, (SELECT 0 t1 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t1, (SELECT 0 t2 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2, (SELECT 0 t3 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t3, (SELECT 0 t4 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t4) calendar INNER JOIN project1.leaves ON calendar.date_value BETWEEN DATE(leaves.BEGIN_DATE) AND DATE(leaves.END_DATE) INNER JOIN project1.workers ON leaves.ID_WORKER = workers.ID_WORKER WHERE NOT WEEKDAY(date_value) IN (5, 6) AND NOT DATE(date_value) IN (SELECT HOLIDAY_DATE FROM project1.holidays) GROUP BY ID_LEAVE;
Но я не знаю, что мне делать.