|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Invité de passage
![]() Inscription : avril 2011 Messages : 3 ![]() |
Bonjour,
J'ai quelques bonnes notions en développement PHP, mais de gros souci avec les requêtes "complexes" sous SQL Server 2005. Ma table simplifiée : clients et dates. Code :
Je récupère tout les évènements de la journée du 24 et du 25. Maintenant, je souhaiterais ne garder que les évènements compris entre 2 heures et si je rajoute un malheureux : Code :
Alors, Je l'ai tourné en : Code :
MaTable.date > '07:30' AND MaTable.date < '15:00' Entre 2, un petit espoir en voyant : Code :
Je tente finalement en vain : Code :
DATE_FORMAT(MaTable.date, '%Hh%imin') BETWEEN '07:30' AND '20:00' Je ne sais plus ... Le DATEPART pourrais me permettre d'extraire les heures puis les minutes ... une concaténation du genre heure+':'+minute et je pourrais lancer une comparaison, mais comment faire ceci? Je vois également qu'il est possible d'imbriquer des requêtes. dans les exemples ça marche toujours très bien, mais des que j'essaie ca se solde tout le temps par une erreur... Je suis quelque peu perdu! et les yeux qui piquent!! Plizz Help! |
||||||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() |
Citation:
Citation:
Vous pouvez simplement affiner avec DATEPART(minute,MaTable.date)... pour extraire les minutes.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
||
|
|
00
|
|
|
#3 | ||||
|
Invité de passage
![]() Inscription : avril 2011 Messages : 3 ![]() |
Bonjour,
Effectivement, j'ai bien compris que le DATEPART permettait de détailler la date, Mais je ne vois pas comment formuler la requête pour faire la comparaison? je vois 2 options : - Soit je compare séparément: Code :
- Comparer simultanément, du genre : Code :
DATEPART(hh, MaTable.date)+':'+DATEPART(hh, MaTable.date) BETWEEN '07:30' AND '20:00' et ca me sort une jolie erreur de type. J'ai donc 'casté' tout ca du genre : Mais évidemment rien n'est sorti! ... et c'est en écrivant ce post que je me suis dit : Tu as casté vers le varchar ... pourquoi pas tenter dans l'autre sens? et la ... miracle! Code :
(DATEPART(hh,MaTable.date)+(DATEPART( mi,MaTable.date )/100)) BETWEEN 5 AND 5 Je m'explique dans la requete, J'additionne l'heure avec les minutes/100, ca me fait donc un chiffre qui va aller de 0 à 23.59 Mais oui! entre 5 et 5 ... il me trouve des résultats! Bug? Comment de 5.00 jusqu’à 5.59, SQL peut-il dire que c'est entre 5 et 5...?? --> seule réponse que je vois c'est qu'il l'a rangé par ordre alphabétique?? ...et avant il m'embêtait avec une histoire de type?!! Enfin bon, plus qu'a retoucher le petit bug avec un peu de code derrière mais ca va largement me faciliter la tache. Comme quoi, merci pour ton intervention iberserk code complet: Code :
|
||||
|
|
00
|
|
|
#4 | ||
|
Membre éprouvé
![]() ![]() Hamid MIRAIngénieur développement logiciels Inscription : septembre 2003 Messages : 177 ![]() |
Ta solution me parait incompréhensible et hasardeuse !
Ci-dessous une solution utilisant la notation normalisée ISO8601 : aaaa-mm-jjThh:mi:ss.mmm Exemple : Evennements entre 07:30 et 15:00 Code :
A+ |
||
|
|
00
|
|
|
#5 | |
|
Membre Expert
![]() |
Citation:
Le problème viens du fais que tu divises... d'où forcement problème d'arrondies. En restant en seconde (heures*60+ secondes) tu n'aurais pas eu le soucis...
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|
|
|
00
|
|
|
#6 | |||||
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Citation:
Code SQL :
Tes colonnes sont de type DATETIME ? utilise les fonctions date ! Code SQL :
|
|||||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com