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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Gestion de tranches horaires sur deux jours

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gestion de tranches horaires sur deux jours

n°1754655
jumpuperon​e
Posté le 02-07-2008 à 17:48:36  profilanswer
 

Bonjour toutes et tous,
 
Mon sujet de message n'étant pas très expressif, voici mon soucis du moment:
J'ai besoin de renvoyer un champs donnant le nom de la tranche horaire dans laquelle je me trouve actuellement.
Voici un exemple de la table "Tranche" (Start et End sont des entiers, par exemple: 2000 pour 20h ou 0115 pour 1H15)
idtranche   Start_Tranche   End_Tranche    Nom_Tranche
1              0800                0930               T1
2              2200                0200               T2
etc...
 
Mon soucis se situe lorsque la tranche est situé sur deux jours (exemple avec id 2 de 22H à 2h le lendemain) car je ne peux pas faire de comparaison de temps avec les minutes comme effectué ci dessous:
SELECT     IDTranche
FROM         Tranche
WHERE     (DATEPART(hh, GETDATE()) * 60 + DATEPART(n, GETDATE()) BETWEEN LEFT(Start_Tranche, 2) * 60 + RIGHT(Start_Tranche, 2) AND LEFT(End_Tranche, 2)  
                      * 60 + RIGHT(End_Tranche, 2))
 
J'ai essayé de convertir avec des formats dates mais je ne m'en sors pas.
 
Donc si vous avez une idée je suis preneur.
 
Merci d'avance.
 
Jumpup
 

mood
Publicité
Posté le 02-07-2008 à 17:48:36  profilanswer
 

n°1754657
MagicBuzz
Posté le 02-07-2008 à 17:52:44  profilanswer
 

sans tester, copier/coller rapide :
 

Code :
  1. SELECT     IDTranche
  2. FROM         Tranche
  3. WHERE     case sign(start_tranche - end_tranche) when 1 then (DATEPART(hh, GETDATE()) * 60 + DATEPART(n, GETDATE()) BETWEEN LEFT(Start_Tranche, 2) * 60 + RIGHT(Start_Tranche, 2) AND LEFT(End_Tranche, 2)  
  4.                      * 60 + RIGHT(End_Tranche, 2))  else (DATEPART(hh, GETDATE()) * 60 + DATEPART(n, GETDATE()) BETWEEN LEFT(End_Tranche, 2) * 60 + RIGHT(End_Tranche, 2) AND LEFT(Start_Tranche, 2)  
  5.                      * 60 + RIGHT(Start_Tranche, 2))
  6. end

n°1754663
jumpuperon​e
Posté le 02-07-2008 à 18:11:35  profilanswer
 

MagicBuzz a écrit :

sans tester, copier/coller rapide :
 

Code :
  1. SELECT     IDTranche
  2. FROM         Tranche
  3. WHERE     case sign(start_tranche - end_tranche) when 1 then (DATEPART(hh, GETDATE()) * 60 + DATEPART(n, GETDATE()) BETWEEN LEFT(Start_Tranche, 2) * 60 + RIGHT(Start_Tranche, 2) AND LEFT(End_Tranche, 2)  
  4.                      * 60 + RIGHT(End_Tranche, 2))  else (DATEPART(hh, GETDATE()) * 60 + DATEPART(n, GETDATE()) BETWEEN LEFT(End_Tranche, 2) * 60 + RIGHT(End_Tranche, 2) AND LEFT(Start_Tranche, 2)  
  5.                      * 60 + RIGHT(Start_Tranche, 2))
  6. end



 
Merci beaucoup je pense que la soustraction est une très bonne voie cependant quand je teste J'ai l'impression qu'il accepte mal le between dans le "then" car j'ai beau essayé d'ajouter des parenthèses rien y fait ou sinon on met ça sur la fin de journée ;)
 
Merci encore

n°1754666
MagicBuzz
Posté le 02-07-2008 à 18:19:58  profilanswer
 

oui effectivement, tu vas certainement devoir réécrire autrement cette partie.
 
mais en gros, il faut partir sur un test de sign(end-start)
=> si 1 : alors c'est une tranche qui est dans la journée
=> si -1 : alors c'est une tranche qui est sur deux journées
=> si 0 : alors c'est une heure fixe
 
ps : ça ne marche que si la tranche fait moins de 24 heures de long. à la 25° heure, tu auras un comportement inversé !
 
en gros, il serait judicieux je pense de rajouter une notion de jour dans la table, ou une durée après l'heure de début si ce sont des intervals récurents

n°1755079
jumpuperon​e
Posté le 03-07-2008 à 14:16:57  profilanswer
 

Bonjour Toutes et tous,
 
Je n'arrive toujours pas à le faire j'ai beau essayé avec des requêtes imbriquées ou autre, je ne m'en sors pas...
 
Peut on effectuer un case dans un where?  
 
Merci de vos réponses

n°1755124
MagicBuzz
Posté le 03-07-2008 à 15:00:04  profilanswer
 

oui

n°1755126
MagicBuzz
Posté le 03-07-2008 à 15:01:06  profilanswer
 

ceci dit, un petit
 
where (sign() = 1 and ...) or (sign() = -1 and ...)
 
fera tout aussi bien l'affaire et sera limite plus lisible

n°1755202
jumpuperon​e
Posté le 03-07-2008 à 16:06:17  profilanswer
 

Yeah Yeah Yeah!
 
Avec les bons conseils de MagicBuzz j'y suis arrivé!  
 
Merci encore


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

  Gestion de tranches horaires sur deux jours

 

Sujets relatifs
[Hibernate] gestion du cache, best practices et sessionsnombre de jours entre deux dates
Gestion des dates par ID (php5 mysql5)problème de gestion des get
Gestion à DistanceGestion des pages PHP + référencement + Xiti
Les 5 prochains jours du moisGestion d'un processus avec timeout
[DB2] gestion de transactiongestion de dépots en sql
Plus de sujets relatifs à : Gestion de tranches horaires sur deux jours


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