Selection d'intervalle de date et heure mysql - SQL/NoSQL - Programmation
Marsh Posté le 12-09-2014 à 10:10:34
Ben oui :
SELECT * FROM table WHERE ChampDate BETWEEN "2014-09-10 22:00:00" AND "2014-09-11 22:00:00"
Naturellement, ça suppose que t'as eu la bonne idée de faire un champ de type DateTime
Marsh Posté le 12-09-2014 à 11:12:58
rufo a écrit : Ben oui : |
C'est ça le problème ... j'ai différencié avec un champ date et time ...
Marsh Posté le 12-09-2014 à 11:25:55
Dans ce style:
Code :
|
Même sur des champs de type varchar ça devrait fonctionner
Marsh Posté le 12-09-2014 à 11:46:07
Si les champs son de type varchar (ce qui serait très étonnant) il devra caster pour que le between fonctionne correctement. Sinon, Mysql va probablement convertir en entier la chaîne qui aura donc une valeur bien différente que si elle est castée en timestamp.
Par ailleurs, faire une requête avec un OR, vaut mieux éviter, le OR ayant la fâcheuse tendance à pourrir les perfs de n'importe quel SGBD.
hppp : soit tu restructures tes 2 champs en un seul si t'en as la possibilité (ça serait la solution la plus propre et la plus performante), soit tu utilises CONCAT_WS(' ', date, heure) pour regrouper à la volée tes 2 champs
SELECT * FROM table WHERE CONCAT_WS(' ', date, heure) BETWEEN "2014-09-10 22:00:00" AND "2014-09-11 22:00:00"
Edit : y'aura peut-être un petit cast à faire sur le CONCAT_WS vu que de base, il travaille sur des strings.
Marsh Posté le 12-09-2014 à 14:49:58
rufo a écrit : Si les champs son de type varchar (ce qui serait très étonnant) il devra caster pour que le between fonctionne correctement. Sinon, Mysql va probablement convertir en entier la chaîne qui aura donc une valeur bien différente que si elle est castée en timestamp. Par ailleurs, faire une requête avec un OR, vaut mieux éviter, le OR ayant la fâcheuse tendance à pourrir les perfs de n'importe quel SGBD. hppp : soit tu restructures tes 2 champs en un seul si t'en as la possibilité (ça serait la solution la plus propre et la plus performante), soit tu utilises CONCAT_WS(' ', date, heure) pour regrouper à la volée tes 2 champs SELECT * FROM table WHERE CONCAT_WS(' ', date, heure) BETWEEN "2014-09-10 22:00:00" AND "2014-09-11 22:00:00" Edit : y'aura peut-être un petit cast à faire sur le CONCAT_WS vu que de base, il travaille sur des strings. |
Non, mes champs sont bien en type "time" et "date".
je vais essayer ça merci.
Marsh Posté le 12-09-2014 à 15:03:03
Ce que je voulais dire, c'est que concat_ws travaille avec des string à la base. Donc peut-être que la valeur retournée par une concaténation d'une date et d'une heure va donner une string aussi, d'où la nécessité de caster.
Marsh Posté le 11-09-2014 à 22:48:21
Bonjour,
Je cherche à sélectionner dans une base mysql les données entre le 2014-09-10 à partir de 22h00 jusqu'au 2014-09-11 jusqu'à 22h00.
J'ai essayé cette requête :
Mais elle me renvoie par ce que je voudrais, auriez vous une idée?
Merci par avance.