web-dev-qa-db-fra.com

Sélectionner des données entre une plage de date/heure

Comment sélectionner des données entre une plage de dates dans MySQL. Ma colonne datetime est au format zoulou de 24 heures. 

select * from hockey_stats 
where game_date between '11/3/2012 00:00:00' and '11/5/2012 23:59:00' 
order by game_date desc;

Ne renvoie rien malgré le fait qu'il y ait des données entre ces périodes. Dois-je forcer les valeurs dans les champs "de" et "à" à datetime, dans la requête?

55
codingknob

Vous devez mettre à jour le format de date:

select * from hockey_stats 
where game_date between '2012-03-11 00:00:00' and '2012-05-11 23:59:00' 
order by game_date desc;
104
Eugen Rieck

Voici un moyen simple en utilisant la fonction date:

select *
from hockey_stats
where date(game_date) between date('2012-11-03') and date('2012-11-05')
order by game_date desc
14
Gordon Linoff

Un moyen simple:  

select  * from  hockey_stats 
where  game_date >= '2012-03-11' and game_date  <= '2012-05-11'
6
rashedcs

Vous devrez probablement utiliser STR_TO_DATE function:

select * from hockey_stats 
where
  game_date between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s')
                and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') 
order by game_date desc;

(Si game_date est une chaîne, vous devrez peut-être utiliser STR_TO_DATE dessus)

4
fthiella

Le format de date MySQL est le suivant: Y-M-D. Vous utilisez Y/M/D. C'est faux. modifiez votre requête. 

Si vous insérez la date comme Y/M/D, il s'agira d'insérer une valeur null dans la base de données. 

Si vous utilisez PHP et que la date que vous obtenez du formulaire est comme ceci O/M/D, vous pouvez le remplacer par l'utilisation de l'instruction. 

out_date=date('Y-m-d', strtotime(str_replace('/', '-', $data["input_date"])))
3
Hafiz Shehbaz Ali

D'une manière simple, il peut être interrogé comme

select * from hockey_stats 
where game_date between '2018-01-01' and '2018-01-31';

Cela fonctionne si le temps n'est pas une préoccupation.

Le temps pris en compte est également suivi de la manière suivante: Notez que ceci est pour le serveur MySQL.

2
C T Mithun

Vous devez rechercher date à défendre sur la manière dont vous avez inséré ces données game_date dans votre base de données. Par exemple, si vous avez inséré une valeur de date longue ou courte.

SELECT * FROM hockey_stats WHERE game_date >= "6/11/2018" AND game_date <= "6/17/2018"

Vous pouvez également utiliserENTRE:

SELECT * FROM hockey_stats WHERE game_date BETWEEN "6/11/2018" AND "6/17/2018"

aussi simple que cela.

1
ramber

Vous pouvez soit user STR_TO_DATE function et transmettre vos propres paramètres de date en fonction du format que vous avez publié:

select * from hockey_stats where game_date 
  between STR_TO_DATE('11/3/2012 00:00:00', '%c/%e/%Y %H:%i:%s')
  and STR_TO_DATE('11/5/2012 23:59:00', '%c/%e/%Y %H:%i:%s') 
order by game_date desc;

Ou utilisez simplement le format que MySQL gère les dates AAAA: MM: JJ HH: mm: SS et donnez la requête comme 

select * from hockey_stats where game_date between '2012-03-11 00:00:00' and'2012-05-11 23:59:00' order by game_date desc;

1
stackFan