ホームページ > データベース > mysql チュートリアル > PostgreSQL で週末を除き、特定の労働時間を考慮して 2 つの日付の間の労働時間を計算する方法は?

PostgreSQL で週末を除き、特定の労働時間を考慮して 2 つの日付の間の労働時間を計算する方法は?

Patricia Arquette
リリース: 2024-12-29 06:56:11
オリジナル
656 人が閲覧しました

How to Calculate Working Hours Between Two Dates in PostgreSQL, Excluding Weekends and Considering Specific Working Hours?

PostgreSQL で 2 つの日付間の労働時間を計算する

問題:

2 つのタイムスタンプを指定して、労働時間の数を決定するその間は、週末を非稼働日とし、稼働時間を午前 8 時から午前 8 時までとみなします。 3:00 PM.

例:

  • タイムスタンプ: 12 月 3 日、14:00 ~ 12 月 4 日、9:00
  • 働いています時間: 2 時間 (12 月 3 日 = 1 時間、12 月 4 日 = 1 時間)
  • タイムスタンプ: 12 月 3 日、15:00 ~ 12 月 7 日、8:00
  • 労働時間: 8 時間 (12 月 3 日 = 0 時間、12 月 4 日 = 8 時間、12 月 5 日 = 0 時間、12 月 6 日 = 0 時間、12 月 7 日 = 0 時間)

解決策 - 四捨五入された結果:

SELECT count(*) AS work_hours
FROM   generate_series (timestamp '2013-06-24 13:30',
                      timestamp '2013-06-24 15:29' - interval '1h',
                      interval '1h') h
WHERE  EXTRACT(ISODOW FROM h) < 6
AND    h::time >= '08:00'
AND    h::time <= '14:00';
ログイン後にコピー

ソリューション - 詳細精度:

より小さい時間単位 (例: 5 分のスライス) を使用すると、精度が向上します:

SELECT count(*) * interval '5 min' AS work_interval
FROM   generate_series (timestamp '2013-06-24 13:30',
                      timestamp '2013-06-24 15:29' - interval '5 min',
                      interval '5 min') h
WHERE  EXTRACT(ISODOW FROM h) < 6
AND    h::time >= '08:00'
AND    h::time <= '14:55';
ログイン後にコピー

解決策 - 正確な結果:

マイクロ秒レベルまで正確な結果を得るには、次のコマンドを使用します。アプローチ:

以上がPostgreSQL で週末を除き、特定の労働時間を考慮して 2 つの日付の間の労働時間を計算する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート