|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Chercheur en informatique Inscription : juillet 2011 Messages : 26 ![]() |
Bonjour,
Il s'agit d'une problématique que nous rencontrons souvent en entreprise et dont le calcul me semble compliqué sans table de référence. La question porte sur la méthode à utiliser pour pouvoir calculer une différence en heures entre deux dates mais en tenant compte seulement des horaires ouvertures. Exemple : date_deb_activité : 07/09/2010 14h:00 date_fin_activité le 09/09/2011 14h:00 sachant que les horaires d'ouvertures sont : 08h - 18h et les jours ouvrés lundi au samedi dans l'exemple au dessus : le total à trouver est de 4h+8h+6h=18h Pouvez vous svp m'aider à rédiger la requête sous sql ? Merci beaucoup |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
La durée de travail du premier jour est Code :
18 - to_char(date_deb, 'hh24') - to_char(date_deb, 'mi')/60 Code :
(to_char(date_fin, 'hh24') + to_char(date_fin, 'mi')/60) - 8 Code :
10 * (trunc(date_fin) - trunc(date_deb) - 1) Code :
|
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Chercheur en informatique Inscription : juillet 2011 Messages : 26 ![]() |
Super ..fonctionnement parfait
Un grand merci |
|
|
00
|
|
|
#4 | ||
|
Membre expérimenté
![]() Mohamed HouriInscription : mars 2010 Messages : 286 ![]() |
Il me semble que cela ne tienne pas compte de toutes les possibilités. Je pense à une date de fin se trouvant le dimanche ou après dimanche. Je pense également au jours fériés
Code :
|
||
|
|
00
|
|
|
#5 | ||||||||
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Bonne remarque pour les dimanches, Mohamed, mais ton code est faux et ne tient compte que des heures entières. Il faut retrancher de ma formule le nombre de dimanches entre date_deb et date_fin, qui vaut 1 + le nombre de semaines entières entre date_fin et le prochain dimanche après date_deb si le prochain dimanche après date_deb est avant date_fin, 0 sinon : Code :
Si on veut calculer avec des début et fin en dehors des périodes d'activité, la durée de travail du premier jour devient nulle si c'est un dimanche : Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#6 | |
|
Invité de passage
![]() Chercheur en informatique Inscription : juillet 2011 Messages : 26 ![]() |
Bonjour,
Effectivement, ceci répond en grande partie à ma problématique par contre, concernant les jours fériés et dimanche, je me base sur une table temporaire pour ne pas les prendre en compte ( un pré calcul dans un With qui permet de calculer le nombre de jours ouvrés entre la date debut et date de fin) il reste une question concernant : Citation:
dois je gérer deux cas ( date deb=date fin) et date fin > date deb) ? Merci |
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Chercheur en informatique Inscription : juillet 2011 Messages : 26 ![]() |
Bonjour,
Pour répondre à la dernière question, j'ai ajouté un case when pour tenir compte du cas de l’égalité des des deux dates (JJ/MM/YYYY) Cordialement, |
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : juin 2007 Messages : 480 ![]() |
Bonjour,
Si les deux dates sont égales, il faut bien enlever 10 à la somme des durées de travail du premier jour et du dernier jour, sinon le résultat est faux. Par exemple, pour une plage de 10h à 12h dans une journée, on a - durée 1er jour = 18-10 = 8h - durée 2e jour = 12-8 = 4h Total = 8 + 4 - 10 = 2 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com