Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2106 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Selection d'intervalle de date et heure mysql

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Selection d'intervalle de date et heure mysql

n°2237833
hppp
Serveur@home
Posté le 11-09-2014 à 22:48:21  profilanswer
 

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.

mood
Publicité
Posté le 11-09-2014 à 22:48:21  profilanswer
 

n°2237859
rufo
Pas me confondre avec Lycos!
Posté le 12-09-2014 à 10:10:34  profilanswer
 

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
n°2237867
hppp
Serveur@home
Posté le 12-09-2014 à 11:12:58  profilanswer
 

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

n°2237869
x1fr
Posté le 12-09-2014 à 11:25:55  profilanswer
 

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
n°2237871
rufo
Pas me confondre avec Lycos!
Posté le 12-09-2014 à 11:46:07  profilanswer
 

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
n°2237883
hppp
Serveur@home
Posté le 12-09-2014 à 14:49:58  profilanswer
 

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
n°2237885
rufo
Pas me confondre avec Lycos!
Posté le 12-09-2014 à 15:03:03  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Selection d'intervalle de date et heure mysql

 

Sujets relatifs
Fonctions avec requetes en base MySQLC# et connexion mySQL erreur 1042
réplication mysql master/slave ne fonctionne pasmysql et gtk
[VBA] - fonction FIND associée à la recherche d'une dateSe connecter à la base Mysql Free depuis MySQL Workbench
Excel: Problème pour étendre une sélectionMysql : nombre de jours entre deux dates pour une entrée
Requete Mysql complexe sur 3 tablesSWITCH + MYSQL
Plus de sujets relatifs à : Selection d'intervalle de date et heure mysql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR