Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL - Изчислете нетната времева разлика между две дати и времена, като изключите прекъсванията?

сумирайте всичките си паузи, които се случват по време на времената, и след това извадете от резултата от функцията 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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Алтернатива на mysql_real_escape_string без свързване към DB

  2. MySQL - ИЗБЕРЕТЕ КЪДЕ дата <X

  3. MySQL „Отрязана неправилна INTEGER стойност“

  4. Как да оптимизирам база данни за супернизови заявки?

  5. Синтактична грешка на MySQL:близо до '1' на ред 1