Bonjour,
j'ai une table avec un champ date au format datetime (aaaa-mm-jj hh:mm:ss)
et j'aimerais faire une requete du genre:
sort moi tous les enregistrements du lundi au vendredi de 9h à 12h30
vous faites ça comment?
merci pour votre aide.
Version imprimable
Bonjour,
j'ai une table avec un champ date au format datetime (aaaa-mm-jj hh:mm:ss)
et j'aimerais faire une requete du genre:
sort moi tous les enregistrements du lundi au vendredi de 9h à 12h30
vous faites ça comment?
merci pour votre aide.
Bonjour,
Juste une petite demande de précision : ce sont tous les enregistrements de 9h à 12h30 pour chaque jour de ta table qui est un lundi, un mardi, un mercredi, un jeudi ou un vendredi que tu veux ?
Où alors ce sont les enregistrement entre le lundi 9h et le vendredi 12h30 ?
Et ça vaut pour toutes les semaines dans la table ?
Parce selon la façon dont on comprend ta demande, ça change passablement les conditions dans la requête ;)
ced
J'ai une fonction PHP qui s'appuie sur un test SQL sur lequel tu pourras t'inspirer.
Petite description de ce que fait la fonction avant de présenter le code SQL :
function bdd_is_between_times ($arg_begintime,$arg_endtime)
$arg_begintime: Time début (format hh:mm:ss),
$arg_endtime: Time Fin
Cette fonction indique si l'on se trouve actuellement entre 2 heures :
Elle tient compte de l'ordre des paramètres.
Si la première heure est supérieure à la deuxième, la fonction en deduit que la deuxieme heure se situe sur le jour suivant.
précision à la seconde
retourne TRUE si on est dans la période
sinon FALSE
Pour plus de lisibilité dans le code suivant, on peut remplacer ".$arg_begintime." par 22:00:00
et ".$arg_endtime." par 01:00:00 par exemple:
Dans ton cas, c'est la dernière partie qui te sera utile.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 SELECT CONCAT(DATE(NOW()),' ".$arg_begintime."') INTO @begin_period; SELECT CONCAT(DATE(NOW()),' ".$arg_endtime."') INTO @end_period; SELECT IF ( (SELECT (TIMESTAMPDIFF(SECOND,@begin_period,@end_period)<0)), DATE_ADD(@end_period, INTERVAL + 1 DAY), @end_period ) INTO @end_period; SELECT ( (TIMESTAMPDIFF(SECOND,@begin_period,NOW())>=0) AND (TIMESTAMPDIFF(SECOND,@end_period,NOW())<=0) );
Remplace NOW() par le champs Datetime a tester et c bon.
Est ce que ça répond a tes besoins ?
merci pour vos reponses, j'ai fais avec DATE_FORMAT:
DATE_FORMAT( date_end, '%w' ) NOT IN ( 0, 6 )
DATE_FORMAT( date_end, '%T' ) BETWEEN '09:00:00' AND '12:30:00'