Calculer la Date de reprise
Résolu
@min@
Messages postés
49
Date d'inscription
Statut
Membre
Dernière intervention
-
@min@ Messages postés 49 Date d'inscription Statut Membre Dernière intervention -
@min@ Messages postés 49 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Calculer la Date de reprise
- Comment calculer la moyenne sur excel - Guide
- Airpods 3 date de sortie - Guide
- Office 2024 date de sortie - Accueil - Bureautique
- Samsung a33 date de sortie - Guide
- Jm date avis - Forum Consommation & Internet
2 réponses
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