Calculer le nombre de lundi entre 2 dates [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 28-04-2009 à 16:18:16
- Compter le nombre de jours entre les deux date.
- Diviser ce nombre par 7. Cela donne N, auquel il faudra peut-être ajouter 1.
- Récupérer le reste de la division par un modulo 7
- Si le reste est supérieur à 0, par exemple 3, il va falloir rechercher s'il y a un lundi dans ces trois jours.
- Récupérer le numéro du jour de la semaine de la date du début avec un datepart(), et comparer ce nombre avec le reste de la division. Faire un petit tableau sur papier de tous les cas pour faire la bonne comparaison et pour ne pas oublier de cas.
Marsh Posté le 29-04-2009 à 11:29:55
Bon j'ai apparement fini, j'ai écris ça sous forme de procédure pour que ça soit plus compréhensible mais je l'ai intégré à mon projet dans une seule requete.
Code :
|
Marsh Posté le 29-04-2009 à 13:21:30
Le nombre de lundi se calcule très facilement :
1. Jour (0,6, 0 lundi) de la première date
2. Compter le nombre de jours entre les deux dates
3. Faire int((2)-(1) / 7)
Marsh Posté le 29-04-2009 à 13:31:56
J'ai pas compris la, tu peux expliquer un peu plus ?
( et pour moi le 1 est le lundi, 7 le dimanche).
Le numero de jour est un parametre, par exemple je veux du 02 avril au 25 avril je veux obtenir (j'y arrive mais si y a plus simple)
Numero jour NB
0 3
1 3
2 3
3 3
4 4
5 4
6 4
Je vois pas ou est le numero du jour que je cherche dans ce que tu proposes
Marsh Posté le 29-04-2009 à 17:54:58
Sur un exemple, pour reprendre le tien, du 2 avril (un jeudi) jusqu'au 25 (un samedi). Je vais partir sur ta base, c'est à dire lundi = 1 et dimanche = 7.
L'idée est la suivante : si tu souhaites compter le nombre de lundi, le plus simple est de se ramener au lundi de la semaine du jour de départ (dans le cas de notre exemple, on est le 30 mars). Ensuite, on compte le nombre de semaines entières qu'il y a jusqu'à la date de fin décalée.
Donc : le premier jour est un 4 (jeudi, en débutant à 1 pour le lundi). On doit donc décaler de 3 jours (si, comme dans mon message précédent, on débute à 0, on décale exactement du numéro du jour). Puisqu'on se décale de 3 jours, la date de fin doit aussi se décaler. En réalité, on ne touche pas à la date de fin (qui ne nous intéresse pas), mais on va plutot compter le nombre de jours. Puisqu'il y a 25-2+1 jours entre tes deux dates, cela nous donne (24-3)/7 = 3 lundis entre les deux dates.
Marsh Posté le 28-04-2009 à 15:44:37
Bonjour,
Je cherche la méthode la plus évidente pour calculer le nombre de lundi (par exemple) entre 2 dates, sachant que la date de début et/ou la date de fin peuvent être un lundi ou non.
Je connais bien les fonctions sur les dates en sql (la je bosse sous sybase, mais je me débrouillerais si on me file une syntaxe MYSQL), c'est juste une histoire de logique en sorte.
Merci