首頁 > 資料庫 > mysql教程 > 如何在 Oracle SQL 中計算兩個日期之間的營業時間?

如何在 Oracle SQL 中計算兩個日期之間的營業時間?

Patricia Arquette
發布: 2025-01-01 09:21:10
原創
174 人瀏覽過

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

在Oracle SQL 中根據營業時間計算時間

在Oracle SQL 中,計算兩個時間段之間的時間可以很簡單。但如果需要考慮營業時間的話,計算就變得比較複雜。

營業時間規範

提供的營業時間為週一至週六8:00上午至下午 6:00。要將這些小時數合併到計算中,您可以結合使用日期操作和條件邏輯。

SQL 查詢

以下 SQL查詢提供了計算小時數的解決方案根據指定業務小時:

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;
登入後複製

解釋

  • 週: 查詢首先使用TRUNC( end_time, 'IW' ) 和TRUNC( start_time, 'IW' )。這些計算給出了包含任務開始和結束的 ISO 週的開始和結束日期。
  • 天數: LEAST() 和 GREATEST() 函數用來考慮部分範圍開始和結束的天數,營業時間可能不適用。
  • 時間: 時間差異最後一天和範圍開始前一天的計算方式類似。
  • 乘法:最終計算將結果乘以 24,將分鐘轉換為小時。

範例資料與輸出

使用提供的範例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
登入後複製

查詢輸出下列結果:

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

查詢輸出以下結果:

這些結果準確反映了基於​​指定營業時間的工作時間數。

以上是如何在 Oracle SQL 中計算兩個日期之間的營業時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板