Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
734 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL]Calculer le nombre de lundi entre 2 dates

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL]Calculer le nombre de lundi entre 2 dates

n°1878853
Alisteroid
Posté le 28-04-2009 à 15:44:37  profilanswer
 

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  :hello:  

mood
Publicité
Posté le 28-04-2009 à 15:44:37  profilanswer
 

n°1878894
olivthill
Posté le 28-04-2009 à 16:18:16  profilanswer
 

- 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.

n°1879145
Alisteroid
Posté le 29-04-2009 à 11:29:55  profilanswer
 

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 :
  1. CREATE procedure nbJourSemaine
  2. @dateDebut date,
  3. @dateFin date,
  4. @jourSemaine int
  5. AS
  6. BEGIN
  7.     declare @nbSemaines int
  8.     declare @joursRestants int
  9.     SET @nbSemaines = datediff(day, @dateDebut, @dateFin)/7
  10.     SET @joursRestants = datediff(day, @dateDebut, @dateFin)%7    
  11.     
  12.     SELECT
  13.     @nbSemaines+
  14.     (
  15.         CASE
  16.             when @joursRestants >0
  17.                 then
  18.                     CASE                    
  19.                         when datepart(weekday, dateadd(day, -1*@joursRestants, @dateFin)) > DATEPART(weekday,@dateFin)
  20.                         then
  21.                             case
  22.                                 when @jourSemaine < datepart(weekday, dateadd(day, -1*@joursRestants, @dateFin)) AND  @jourSemaine > DATEPART(weekday,@dateFin) then 0
  23.                                 else 1
  24.                             end
  25.                         when datepart(weekday, dateadd(day, -1*@joursRestants, @dateFin)) < DATEPART(weekday,@dateFin)
  26.                         then
  27.                             case
  28.                                 when @jourSemaine >= datepart(weekday, dateadd(day, -1*@joursRestants, @dateFin)) AND  @jourSemaine <= DATEPART(weekday,@dateFin) then 1
  29.                                 else 0
  30.                             end                        
  31.                     end
  32.             else 0
  33.         end
  34.     )
  35. END;


Message édité par Alisteroid le 29-04-2009 à 11:32:09
n°1879238
guybrush02
Posté le 29-04-2009 à 13:21:30  profilanswer
 

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)
 

n°1879251
Alisteroid
Posté le 29-04-2009 à 13:31:56  profilanswer
 

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


Message édité par Alisteroid le 29-04-2009 à 14:11:51
n°1879446
guybrush02
Posté le 29-04-2009 à 17:54:58  profilanswer
 

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.  
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL]Calculer le nombre de lundi entre 2 dates

 

Sujets relatifs
Problème connexion BDD SQlRequête sur plusieurs tables avec un nombre de champs différent
compter le nombre de meme mot dans un .txt[SQL] Supprimer les entrées d'1 table selon critère d'1 autre table
Calcul de difference entre 2 dates dans 1 fichier 'Batch'Aide pour Requêtes SQL
nombre premier visual basic[Troll] Join SQL traditionnel ou ANSI ?
execution d'un .SQL dans un .BATRecupérer les lignes ou les dates sont les plus récente
Plus de sujets relatifs à : [SQL]Calculer le nombre de lundi entre 2 dates


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR