Selection d'intervalle de date et heure mysql

Selection d'intervalle de date et heure mysql - SQL/NoSQL - Programmation

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 :
 

Code :
  1. select *
  2. from table
  3. where (CASE WHEN DATE >= '2014-09-10' THEN heure BETWEEN '22:00' AND '23:00' END) AND (CASE WHEN DATE >= '2014-09-11' THEN heure BETWEEN '00:00' AND '22:00' END);


 
Mais elle me renvoie par ce que je voudrais, auriez vous une idée?
 
Merci par avance.

Reply

Marsh Posté le 11-09-2014 à 22:48:21   

Reply

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 :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-09-2014 à 11:12:58    

rufo a écrit :

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 :/


 
C'est ça le problème ... j'ai différencié avec un champ date et time ...

Reply

Marsh Posté le 12-09-2014 à 11:25:55    

Dans ce style:
 

Code :
  1. SELECT
  2.     *
  3. FROM
  4.     table
  5. WHERE
  6.     (date = '2014-09-10' AND heure >= '22:00')
  7.     OR (date = '2014-09-11' AND heure <= '22:00');


 
Même sur des champs de type varchar ça devrait fonctionner


---------------
Origin / PSN / Steam / Uplay : x1fr - bnet : Fab#2717
Reply

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.

Message cité 1 fois
Message édité par rufo le 12-09-2014 à 11:46:55

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

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.


Message édité par hppp le 12-09-2014 à 16:01:15
Reply

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. ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed