как получить сумму более 1000: 00: 00 с помощью mysql - PullRequest
1 голос
/ 21 ноября 2019

Я хочу получить общее количество часов в данном месяце, оно может быть больше 1000 часов. У меня уже есть запрос суммы времени, но он ограничен 839: 59: 59. Как игнорировать или каким-либо другим способом выполнить эту задачу. (ot_hours store в VARCHAR тип данных)

Попробуйте запрос

SELECT SEC_TO_TIME( SUM( TIME_TO_SEC( `ot_hour` ) ) ) AS timeSum 
                 FROM groupotrequest
                 INNER JOIN department 
                 ON department.dept_Id = groupotrequest.dept_Id
                 WHERE groupotrequest.dept_Id = $dept_Id AND month LIKE '$passmonth%' AND overtime_status=6

Пример данных

id  month   ot_hour dept_Id overtime_status overtime_type   date    
1   2019-10 2535:00:00  28  6   main_ot 2019-11-21 07:26:00 
2   2019-11 2535:00:00  28  6   main_ot 2019-11-21 07:27:00 
3   2019-10 20:00       28  6   sub_ot  2019-11-21 07:28:00 
4   2019-11 20:00       28  6   sub_ot  2019-11-21 07:30:00 

я хочу получить 2019-11 итого otчасы как 2555: 00: 00

  function GetApprovedOt($connect,$dept_Id,$passmonth)
  {
      $query01 =$connect->prepare('SELECT SUM( TIME_TO_SEC( `ot_hour` )) 
                 FROM groupotrequest
                 INNER JOIN department 
                 ON department.dept_Id = groupotrequest.dept_Id
                 WHERE groupotrequest.dept_Id = :dept_Id AND month LIKE :passmonth% AND overtime_status=6');

       $query01->execute([
          ':passmonth'  => $passmonth,
          ':dept_Id'    => $dept_Id
          ]);

       list ($totalMins, $remngSecs) = gmp_div_qr($query01->fetchColumn(), 60);
       list ($totalHour, $remngMins) = gmp_div_qr($totalMins, 60);

       echo "Worked a total of $totalHour:$remngMins:$remngSecs.";
  } 

я тоже так пробую. это тоже не работает

1 Ответ

2 голосов
/ 21 ноября 2019

Предполагая, что в ваших данных есть такие значения, как 2535:00:00, вы не можете использовать тип данных time или такие функции, как time_to_sec.

Один из способов - преобразовать строку 2535:30:00 в минуты(2535 * 60 + 30 = 152130), введите сумму, затем конвертируйте сумму обратно в часы и минуты (152130 = 2535 час, 30 минут):

SELECT SUM(
           SUBSTRING_INDEX(ot_hour, ':', 1) * 60 +
           SUBSTRING_INDEX(SUBSTRING_INDEX(ot_hour, ':', 2), ':', -1)
       ) div 60 AS sum_hh,
       SUM(
           SUBSTRING_INDEX(ot_hour, ':', 1) * 60 +
           SUBSTRING_INDEX(SUBSTRING_INDEX(ot_hour, ':', 2), ':', -1)
       ) mod 60 AS sum_mm
FROM t
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...