Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengira Waktu Perniagaan Antara Dua Tarikh dalam Oracle SQL?

Bagaimana untuk Mengira Waktu Perniagaan Antara Dua Tarikh dalam Oracle SQL?

Patricia Arquette
Lepaskan: 2025-01-01 09:21:10
asal
174 orang telah melayarinya

How to Calculate Business Hours Between Two Dates in Oracle SQL?

Kira Jam Berdasarkan Waktu Perniagaan dalam Oracle SQL

Dalam Oracle SQL, pengiraan jam antara dua tempoh masa boleh menjadi mudah. Walau bagaimanapun, jika anda perlu mengambil kira waktu perniagaan, pengiraan menjadi lebih rumit.

Spesifikasi Waktu Perniagaan

Waktu perniagaan yang disediakan ialah Isnin hingga Sabtu dari jam 8:00 Pagi hingga 6:00 Petang. Untuk memasukkan jam ini ke dalam pengiraan, anda boleh menggunakan gabungan manipulasi tarikh dan logik bersyarat.

SQL Query

Pertanyaan SQL berikut menyediakan penyelesaian untuk mengira jam berdasarkan perniagaan yang ditentukan jam:

SELECT task,
       start_time,
       end_time,
       ROUND(
         (
           -- Calculate the full weeks difference from the start of ISO weeks.
           ( TRUNC( end_time, 'IW' ) - TRUNC( start_time, 'IW' ) ) * (10/24) * (6/7)
           -- Add the full days for the final week.
           + LEAST( TRUNC( end_time ) - TRUNC( end_time, 'IW' ), 6 ) * (10/24)
           -- Subtract the full days from the days of the week before the start date.
           - LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24)
           -- Add the hours of the final day
           + LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 )
           -- Subtract the hours of the day before the range starts.
           - LEAST( GREATEST( start_time - TRUNC( start_time ) - 8/24, 0 ), 10/24 )
         )
         -- Multiply to give minutes rather than fractions of full days.
         * 24,
         15 -- Number of decimal places
       ) AS work_day_hours_diff
FROM   your_table;
Salin selepas log masuk

Penjelasan

  • Minggu: Pertanyaan pertama mengira minggu penuh dalam julat menggunakan TRUNC( end_time, 'IW' ) dan TRUNC(masa_mula, 'IW' ). Pengiraan ini memberikan tarikh mula dan tamat minggu ISO yang mengandungi permulaan dan tamat tugas.
  • Hari: Fungsi LEAST() dan GREATEST() digunakan untuk mengambil kira separa hari pada permulaan dan akhir julat, di mana waktu perniagaan mungkin tidak terpakai.
  • Waktu: Perbezaan dalam jam untuk hari terakhir dan hari sebelum julat bermula dikira sama.
  • Pendaraban: Pengiraan akhir mendarabkan hasil dengan 24 untuk menukar minit kepada jam.

Sampel Data dan Output

Dengan sampel yang disediakan data:

TASK | START_TIME | END_TIME
A | 16-JAN-17 10:00 | 23-JAN-17 11:35
B | 18-JAN-17 17:53 | 19-JAN-17 08:00
C | 13-JAN-17 13:00 | 17-JAN-17 14:52
D | 21-JAN-17 10:00 | 30-JAN-17 08:52
Salin selepas log masuk

Pertanyaan menghasilkan keputusan berikut:

TASK START_TIME END_TIME WORK_DAY_HOURS_DIFF
A 2017-01-16 10:00:00 (MON) 2017-01-23 11:35:00 (MON) 61.583333333333333
B 2017-01-18 17:53:00 (WED) 2017-01-19 08:00:00 (THU) .116666666666667
C 2017-01-13 13:00:00 (FRI) 2017-01-17 14:52:00 (TUE) 31.866666666666667
D 2017-01-21 10:00:00 (SAT) 2017-01-30 08:52:00 (MON) 68.866666666666667

Hasil ini menggambarkan dengan tepat bilangan waktu bekerja berdasarkan waktu perniagaan yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Waktu Perniagaan Antara Dua Tarikh dalam Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan