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

Brug af MySql mellem klausul med datoer

Fabio har faktisk ikke ret, hvis timer, minutter og sekunder vil blive inkluderet dette

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

bliver internt

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

Så du vælger faktisk bare 1 sekund af 2013-06-06, ikke hele dagen!

Det samme med BETWEEN selvfølgelig. For at få hele dagen 2013-06-06 skal du skrive

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

eller

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

Gå videre, prøv det selv (eller se det live i en 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*/


  1. Hvordan blev denne logik for registreringer/fanout afledt for tilfældet uden statistik i MySQL's Query Planner?

  2. MariaDB JSON_QUOTE() Forklaret

  3. Sådan bruger du UPDATE fra SELECT i SQL Server

  4. Hvordan knytter jeg et dvaletidsstempel til en MySQL BIGINT?