Gestion de tranches horaires sur deux jours - SQL/NoSQL - Programmation
Marsh Posté le 02-07-2008 à 17:52:44
sans tester, copier/coller rapide :
Code :
|
Marsh Posté le 02-07-2008 à 18:11:35
MagicBuzz a écrit : sans tester, copier/coller rapide :
|
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
Marsh Posté le 02-07-2008 à 18:19:58
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
Marsh Posté le 03-07-2008 à 14:16:57
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
Marsh Posté le 03-07-2008 à 15:01:06
ceci dit, un petit
where (sign() = 1 and ...) or (sign() = -1 and ...)
fera tout aussi bien l'affaire et sera limite plus lisible
Marsh Posté le 03-07-2008 à 16:06:17
Yeah Yeah Yeah!
Avec les bons conseils de MagicBuzz j'y suis arrivé!
Merci encore
Marsh Posté le 02-07-2008 à 17:48:36
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