Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verwendung von MySql between-Klausel mit Datumsangaben

Fabio hat eigentlich nicht Recht, wenn Stunden, Minuten und Sekunden darin enthalten sind

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

wird intern zu

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

Sie wählen also tatsächlich nur 1 Sekunde vom 06.06.2013 aus, nicht den ganzen Tag!

Dasselbe gilt natürlich für BETWEEN. Um den ganzen Tag des 06.06.2013 zu erhalten, müssten Sie schreiben

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

oder

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

Probieren Sie es selbst aus (oder sehen Sie es live in einem 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*/