Maison > base de données > tutoriel mysql > Comment calculer les heures ouvrables entre deux heures dans Oracle SQL ?

Comment calculer les heures ouvrables entre deux heures dans Oracle SQL ?

Susan Sarandon
Libérer: 2024-12-27 14:31:26
original
997 Les gens l'ont consulté

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

Calcul des heures de travail dans Oracle SQL

Lorsque vous travaillez avec des données impliquant des intervalles de temps, il est souvent nécessaire de prendre en compte les heures de travail pour calculer avec précision les heures entre des heures spécifiées. Dans Oracle SQL, vous pouvez y parvenir en exploitant une combinaison de fonctions de date et de calculs mathématiques.

Calcul des heures avec les heures ouvrables

Pour calculer la différence en heures entre un heure de début et de fin en fonction des heures de bureau, vous pouvez suivre ces étapes :

1. Convertir des périodes de temps en jours complets :

  • Calculez la différence des semaines complètes entre le début et la fin des semaines ISO. Multipliez cette valeur par (10/24) et (6/7) pour tenir compte des jours complets.
  • Ajoutez les jours complets de la dernière semaine de la plage à l'aide de la fonction LEAST( TRUNC( end_time ) - TRUNC( end_time, 'IW' ), 6 ) * (10/24).
  • Soustrayez les jours complets des jours de la semaine précédant la date de début en utilisant LEAST( TRUNC( start_time ) - TRUNC( start_time, 'IW' ), 6 ) * (10/24).

2. Gérer les heures au cours du dernier jour :

  • Ajoutez les heures du dernier jour en utilisant LEAST( GREATEST( end_time - TRUNC( end_time ) - 8/24, 0 ), 10/24 ).
  • Soustrayez les heures de la journée avant le début de la plage en utilisant LEAST( GREATEST( start_time - TRUNC( start_time ) - 24/8, 0 ), 24/10 ).

3. Multiplier pour convertir en minutes :

  • Multipliez l'expression ci-dessus par 24 pour la convertir de fractions de jours complets en minutes.

Exemple de requête :

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;
Copier après la connexion

Cette requête calcule les heures en fonction des heures de travail pour les exemples de données fournis, en prenant en tenant compte des horaires du week-end.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal