Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando MySql entre cláusula com datas


Fabio realmente não está certo, se horas, minutos e segundos forem incluídos isso
where date >= '2013-06-01' and date <= '2013-06-06'

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

Na verdade, você apenas seleciona 1 segundo de 2013-06-06, não o dia todo!

O mesmo com BETWEEN, é claro. Para obter o dia inteiro de 2013-06-06 você teria que escrever
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'

Vá em frente, experimente você mesmo (ou veja ao vivo em um 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*/