Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utilisation de MySql entre la clause avec des dates

Fabio n'a en fait pas raison, si les heures, les minutes et les secondes seront incluses ceci

where date >= '2013-06-01' and date <= '2013-06-06'

devient en interne

where date >= '2013-06-01 00:00:00' and date <= '2013-06-06 00:00:00'

Donc, vous sélectionnez simplement 1 seconde du 06/06/2013, pas toute la journée !

Même avec BETWEEN bien sûr. Pour obtenir toute la journée du 06/06/2013, il faudrait écrire

where date >= '2013-06-01' and date <= '2013-06-06 23:59:59'

ou

where date BETWEEN '2013-06-01' AND '2013-06-06 23:59:59'

Allez-y, essayez-le vous-même (ou regardez-le en direct dans un sqlfiddle ):

create table foo (my_date date, my_timestamp timestamp, my_datetime datetime);
insert into foo values ('2013-06-06', '2013-06-06 12:23:34', '2013-06-06 13:35:48');

select * from foo
where
my_date <= '2013-06-06'; /*returns row*/

select * from foo
where
my_timestamp <= '2013-06-06'; /*does NOT return row*/

select * from foo
where
my_datetime <= '2013-06-06'; /*does NOT return row*/

select * from foo
where
my_timestamp <= '2013-06-06 23:59:59';  /*returns row*/

select * from foo
where
my_datetime <= '2013-06-06 23:59:59';  /*returns row*/