Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL - Hitung perbedaan waktu bersih antara dua tanggal-waktu sambil mengecualikan istirahat?

jumlahkan semua jeda yang terjadi selama waktu tersebut, lalu kurangi dengan hasil fungsi 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

Dengan asumsi struktur ini :

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')

Anda dapat menghitungnya dengan kueri berikutnya:

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. Grup Laravel Berdasarkan Tanggal

  2. Cara terbaik untuk menghapus baris mysql dari halaman html - hapus tautan dan php

  3. Mysql - Kesalahan parse (kesalahan sintaks) dalam kode saya

  4. PHP - Menggunakan PDO dengan array klausa IN

  5. MySQL Connect melalui proxy di Java