Calculer la Date de reprise
Résolu/Fermé
@min@
Messages postés
49
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
7 décembre 2011
-
21 sept. 2011 à 13:33
@min@ Messages postés 49 Date d'inscription mercredi 14 juillet 2010 Statut Membre Dernière intervention 7 décembre 2011 - 21 sept. 2011 à 15:09
@min@ Messages postés 49 Date d'inscription mercredi 14 juillet 2010 Statut Membre Dernière intervention 7 décembre 2011 - 21 sept. 2011 à 15:09
A voir également:
- Calculer la Date de reprise
- Comment calculer la moyenne sur excel - Guide
- Publipostage date en anglais ✓ - Forum Excel
- Trouver une date de naissance gratuit - Forum Webmastering
- Publipostage date inversée ✓ - Forum Word
- Airpods 3 date de sortie - Guide
2 réponses
Reivax962
Messages postés
3671
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
21 sept. 2011 à 14:46
21 sept. 2011 à 14:46
Bonjour,
Avant toute considération algorithmique, il faut savoir que les calculs sur les dates dépendent fortement du SGBD. Donc il faut que tu nous dises si tu es sous Oracle, DB2, MySQL, SQL Server...
L'algorithme lui-même n'est pas trop compliqué tant qu'on ne prend pas en considération les jours fériés.
En gros, pour chaque tranche de 5 jours de congés pris, on ajoute 7 jours à la date de début. Le nombre de tranches de 5 jours est le quotient de la division euclidienne du nombre de jours par 5 : (nbr_jour/5)*7
Il reste alors les quelques derniers jours, que l'on trouve par le reste de la même division : (nbr_jour%5). Là, tout va dépendre du jour de début de prise des congés : si jourDébut + reste < samedi, tout va bien. Sinon, on rajoute deux.
En SQL Server, on connaît le jour de début des congés dans la semaine par la fonction datepart(dw, '2011-09-19') qui donne :
Dimanche -> 1
Lundi -> 2
Mardi -> 3
...
Donc si DatePart(dw, dateDebut) + Reste <= 6, le résultat est (dateDebut + (nbr_jour/5)*7 + Reste).
Sinon, le résultat est (dateDebut + (nbr_jour/5)*7 + Reste + 2).
D'où la requête finale, que j'écris pour SQL Server :
Les quelques tests que j'ai fait me donnent, pour une prise de congés aujourd'hui (21/09)
- 15 jours => 12/10
- 17 jours => 14/10
- 18 jours => 17/10
Xavier
Avant toute considération algorithmique, il faut savoir que les calculs sur les dates dépendent fortement du SGBD. Donc il faut que tu nous dises si tu es sous Oracle, DB2, MySQL, SQL Server...
L'algorithme lui-même n'est pas trop compliqué tant qu'on ne prend pas en considération les jours fériés.
En gros, pour chaque tranche de 5 jours de congés pris, on ajoute 7 jours à la date de début. Le nombre de tranches de 5 jours est le quotient de la division euclidienne du nombre de jours par 5 : (nbr_jour/5)*7
Il reste alors les quelques derniers jours, que l'on trouve par le reste de la même division : (nbr_jour%5). Là, tout va dépendre du jour de début de prise des congés : si jourDébut + reste < samedi, tout va bien. Sinon, on rajoute deux.
En SQL Server, on connaît le jour de début des congés dans la semaine par la fonction datepart(dw, '2011-09-19') qui donne :
Dimanche -> 1
Lundi -> 2
Mardi -> 3
...
Donc si DatePart(dw, dateDebut) + Reste <= 6, le résultat est (dateDebut + (nbr_jour/5)*7 + Reste).
Sinon, le résultat est (dateDebut + (nbr_jour/5)*7 + Reste + 2).
D'où la requête finale, que j'écris pour SQL Server :
SELECT CASE WHEN DATEPART(dw, dt_cessation) + (nbr_jour % 5) <= 6 THEN DATEADD(dd, (nbr_jour / 5) * 7 + (nbr_jour % 5), dt_cessation) ELSE DATEADD(dd, (nbr_jour / 5) * 7 + (nbr_jour % 5) + 2, dt_cessation) END FROM congé
Les quelques tests que j'ai fait me donnent, pour une prise de congés aujourd'hui (21/09)
- 15 jours => 12/10
- 17 jours => 14/10
- 18 jours => 17/10
Xavier
@min@
Messages postés
49
Date d'inscription
mercredi 14 juillet 2010
Statut
Membre
Dernière intervention
7 décembre 2011
3
21 sept. 2011 à 15:09
21 sept. 2011 à 15:09
bon merci Xavier ,
j'ai tester votre code et ça marche bien
merci une autre fois pour votre aide.
A bientot
cordialement
amina
j'ai tester votre code et ça marche bien
merci une autre fois pour votre aide.
A bientot
cordialement
amina