Posez votre question Signaler

Calculer la Date de reprise [Résolu]

@min@ 47Messages postés 14 juillet 2010Date d'inscription 7 décembre 2011Dernière intervention - Dernière réponse le 21 sept. 2011 à 15:09
Bonjour,
j'ai une table congé(ID,année,nbr_jour,dt_cessation,motif)
je veux créer une requete sql qui permet de calculer la date de reprise automatiquement lors de saisir le nombre de jours et la date de cessation du service sachant que les jours weekend(samedi et dimanche) seront annuler lors de calcul(ça veux dire que n'ont peut pas les considérés parmis le nombre de jours que j'ai choisi )
merci d'avance pour vos réponses.
cordialement amina.
Lire la suite 

Calculer la Date de reprise »

2 réponses
Réponse
+0
moins plus
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 :

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
Ajouter un commentaire
Réponse
+0
moins plus
bon merci Xavier ,
j'ai tester votre code et ça marche bien
merci une autre fois pour votre aide.
A bientot
cordialement
amina
Ajouter un commentaire
Ce document intitulé « Calculer la Date de reprise » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?