ホームページ >データベース >mysql チュートリアル >Oracle SQLで2つの日付の間の営業時間を計算するにはどうすればよいですか?

Oracle SQLで2つの日付の間の営業時間を計算するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-01 09:21:10168ブラウズ

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

Oracle SQL の営業時間に基づいて時間を計算する

Oracle SQL では、2 つの期間間の時間を簡単に計算できます。ただし、営業時間を考慮する必要がある場合、計算はより複雑になります。

営業時間の指定

指定された営業時間は月曜日から土曜日の 8:00 です。午前から午後6時まで。これらの時間を計算に組み込むには、日付操作と条件付きロジックを組み合わせて使用​​できます。

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 を乗算して、分を時間に変換します。

サンプル データと出力

提供されたサンプルを使用データ:

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で2つの日付の間の営業時間を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。