Mysql
 sql >> Database >  >> RDS >> Mysql

Utilizzo di MySql tra clausola con date

Fabio in realtà non ha ragione, se ore, minuti e secondi saranno inclusi questo

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

diventa internamente

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

Quindi in realtà selezioni solo 1 secondo del 06-06-2013, non tutto il giorno!

Lo stesso con BETWEEN ovviamente. Per ottenere l'intera giornata del 06-06-2013 dovresti scrivere

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

o

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

Vai avanti, provalo tu stesso (o guardalo dal vivo in 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*/