|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
Bonjour. Ca fait plusieurs jours que je planche sur la première proposition de calcul des jours ouvrés que je trouve très élégante pour effectuer un calcul hors samedi et dimanche (je ne gère pas les jours fériés). Cette solution permet de ne pas gérer de table calendrier ni de déclarer de fonction spécifique en PL/SQL.
Or, la solution semble poser un problème dès lors que je gère en jour entier et en délai. Typiquement le nombre de jours non ouvrés (en délai) entre le 10/03/2010 et le 13/03/2010 devrait être de 1 alors que le résultat est 0 et je n'arrive pas à adapter la requête. Est-ce quelqu'un aurait une idée ? Merci d'avance pour votre aide. |
|
|
00
|
|
|
#2 |
|
Futur Membre du Club
![]() Inscription : mars 2010 Messages : 32 ![]() |
Entre le 10/03/2010 00:00 et le 13/03/2010 00:00, il n'y a pas de jours non ouvré.
Le 13/03 c'est le samedi à 0h00 (ou vendredi minuit Par contre entre le 10/03/2010 00:00 et le 14/03/2010 00:00, tu auras bien un jour non ouvré. |
|
|
00
|
|
|
#3 | ||
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
Oui je suis d'accord avec ça. Mais en terme de jours pleins, considérant pleinement mercredi, jeudi, vendredi ET samedi (équivalent samedi 13/03/2010 23h59), le samedi est donc non ouvrable. La formule de calcul est donc incorrecte et c'est cette adaptation que je n'arrive pas à faire.
Pour ce que je veux obtenir, du mercredi au samedi, il y a 1 jour non ouvrable, du mercredi au dimanche il y en a 2. J'ai bien essayé de jouer sur DATEFIN + 1 (pour prendre le samedi comme dimanche 14/03/2010 00h00) mais dans ce cas ce sont bizarrement les périodes de 13 jours qui donnent un résultat faux. Par exemple du 24/03/2010 au 06/04/2010 je ne trouve que 2 jours non ouvrables au lieu de 4. Voici l'extrait de la formule modifiée : Code :
|
||
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
Erratum : la formule modifiée est la suvante :
Code :
|
||
|
|
00
|
|
|
#5 | ||||||
|
Futur Membre du Club
![]() Inscription : mars 2010 Messages : 32 ![]() |
Si j'ai bien compris tu veux que tes dates de début soient considérées comme la datedebut à 00:00:00 et que les dates de fin soient considérées comme datefin à 23:59:59 pour faire comme si toutes les journées étaient entières.
Si c'est bien le cas, tu dois utiliser la fonction trunc. Code :
Citation:
Dans le code ci-dessous, j'ai élagué la table TEMP avec ton exemple, ainsi que la table FERIE puisque tu dis ne pas gérer les jours fériés. J'ai aussi mis des hh:mm:ss dans les dates de début et de fin, et le résultat de cette query est bien de 4 jours pile. Code :
Citation:
|
||||||
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
Cool ! Je pense qu'on s'approche du résultat. Cependant en terme de délai le 1er jour ne doit pas être comptabilisé. Dans cette nouvelle formule il reste des cas particuliers, par exemple :
Du 13/03 au 15/03, ça fait 2 jours de délai mais 1 seul jour non ouvrés (le dimanche) et non pas 2, soit 1 jour ouvré Du 13/03 au 21/03, ça fait 8 jours de délai mais 3 jours non ouvrés (14, 20 et 21) et non pas 4, soit 5 jours ouvrés Le problème intervient principalement lorsque le 2er jour tombe un week-end. Alors en cherchant à calculer le nombre de jours ouvrés je peux faire datedebut-datefin-jours_non_ouvres+1 mais du coup ce sont tous les autres cas qui ne fonctionnent pas. |
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Inscription : mars 2010 Messages : 32 ![]() |
Désolé, mais je ne comprends pas ta demande.
Qd tu dis 2 jours de délai entre le 13/03 et le 15/03. Précédemment j'ai cru comprendre que tu voulais des jours pleins -> 13/03 00:00 -> 15/03 23:59 ça fait 3 jours de délai. Si tu pouvais réexpliquer ta demande depuis le début ![]() De ce que j'ai compris, tu veux calculer des jours ouvrés, tu ne te soucies pas des jours fériés. Il y a un truc avec les journées entières mais j'ai peur de ne rien avoir compris Vla si tu veux plus d'aide il va falloir être plus précis parce que là je sèche ![]() Dis peut-être les dates de début et de fin (avec notion d'heures) que tu as, et le résultat souhaité en nbr de jours ouvrés pour plusieurs exemples qui faciliteront la compréhension de ce que tu souhaites. |
|
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
OK. Pas de souci, je vais réexpliquer. En tout cas je te remercie d'avance pour ton aide.
Je cherche à trouver le nombre de jours ouvrés en délai entre 2 dates. Ex: je fais une demande à une date, j'ai une réponse quelques jours plus tard. En délai ça veut dire que 1j de délai c'est une réponse le lendemain, 2j le surlendemain, etc. Je ne m'occupe pas des heures de la journée ni des jours fériés. Si je fais ma demande le lundi et que j'ai ma réponse le mercredi j'ai bien un délai de 2j, pour 2j ouvrés (mardi et mercredi) et 0j non ouvré. Si je fais ma demande le vendredi et que j'ai ma réponse le lundi j'ai bien un bien un délai de 3j (samedi, dimanche, lundi) pour 1j ouvrés (lundi) et 2j non ouvrés (samedi, dimanche) Si je fais ma demande le samedi et que j'ai ma réponse le mardi j'ai bien un délai 3j (dimanche, lundi, mardi) pour 2j ouvrés (lundi, mardi) et 1j non ouvré (dimanche) Ci-dessous un petit jeu d'essai sous forme de requête qui précise la valeur attendue à savoir le délai en nombre de jours ouvrés. Code :
Merci d'avance. |
||
|
|
00
|
|
|
#9 | ||
|
Futur Membre du Club
![]() Inscription : mars 2010 Messages : 32 ![]() |
Ok c'est beaucoup plus clair ainsi.
Il suffit donc de jouer sur la date + 1 pour la date de debut, et la date de fin. Code :
|
||
|
|
10
|
|
|
#10 |
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
Génial ! Merci beaucoup. Mon jeu d'essai passe maintenant correctement.
A l'occasion, si c'est possible, pourrais tu me donner quelques explications sur la formule ? Qu'est ce que tu entends par "premier week-end de la semaine restante" par exemple. En fait j'aimerais bien comprendre la formule, ce qui n'est pas du tout le cas C'est si tu as le temps bien sûr En tout cas grand merci pour ton aide
|
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Inscription : mars 2010 Messages : 32 ![]() |
C'est loin ... l'idée c'est au départ de calculer le nombre de jours non ouvrés.
Le plus simple au début c'est de calculer le nombre de semaines complètes entre nos 2 bornes. On sait qu'on a déjà le nombre de semaines complètes x 2 jours non ouvrés (samedis et dimanches des semaines complètes). On retire ensuite nos semaines complètes de nos 2 bornes. Si on avait comme borne du 07/09/2011 au 24/09/2011, on a 2 semaines complètes, ce qui fait déjà 2x2 jours non ouvrés. On calcule à partir de ça nos nouvelles bornes qui sont du 07/09/2011 au 10/09/2011 (23/09 - 2 semaines = 10/09). Ca nous donne donc 4 jour non ouvrés + les jours non ouvrés qu'on peut retrouver entre nos nouvelles bornes. A partir de là, on sait que nos nouvelles bornes ne s'étendent pas sur plus d'une semaine. Dans mon exemple, du 07/09 au 10/09, il n'y a qu'un we à la fin. Mais vu que nos bornes s'étendent sur max 1 semaine, avec d'autres dates de départ, on aurait aussi pu avoir comme nouvelles bornes du 11/09/2011 23:00:00 au 17/09/2011 02:00:00. Dans ce cas, on a un bout de we au début de nos nouvelles bornes, et un autre bout de we à la fin de notre borne. Ce sont ces bouts que je calcule séparément. Pour ce qui est du code, il faut le lire avec attention, c'est un petit casse-tête tout de même Tant mieux si le code t'a aidé, c'est dans ce but que je l'avais posté à l'époque. |
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Ludovic Développeur Java Inscription : septembre 2011 Messages : 7 ![]() |
OK. Merci beaucoup pour ces explications. Je vais pouvoir réétudier la formule pour comprendre un peu mieux.
Merci encore pour ton aide
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com