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

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

Susan Sarandon
Susan Sarandon原創
2024-12-27 14:31:26981瀏覽

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

在Oracle SQL 中計算營業時間

處理涉及時間間隔的資料時,通常需要考慮營業時間才能準確計算營業時間指定時間之間。在 Oracle SQL 中,您可以透過利用日期函數和數學計算的組合來實現此目的。

用營業時間計算時間

計算不同時間之間的小時數差異根據營業時間開始和結束時間,您可以按照以下步驟操作:

1.將時段轉換為全天:

  • 計算ISO週開始和結束之間的整週差異。將此值乘以 (10/24) 和 (6/7) 以計算完整天數。
  • 使用函數 LEAST( TRUNC( end_time ) - TRUNC( 在範圍內加入最後一週的完整天數end_time, 'IW' ), 6 ) * (10/24)。
  • 從前一週的天數減去完整天數使用 LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24) 開始日期。

2。處理最後一天內的小時數:

  • 使用 LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 ) 加入最後一天的小時數。
  • 使用 LEAST( GREATEST(開始時間 - TRUNC( 開始時間 ) - 8/24, 0 ), 10/24 )。

3。乘以轉換為分鐘:

  • 將上述表達式乘以 24,將其從全天的分數轉換為分鐘。

範例查詢:

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

此查詢基於所提供樣本資料的工作時間,考慮到週末時間。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn