sql >> Databasteknik >  >> RDS >> Mysql

Använder MySql mellan klausul med datum

Fabio har faktiskt inte rätt, om timmar, minuter och sekunder kommer att inkluderas detta

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

blir internt

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

Så du väljer faktiskt bara 1 sekund av 2013-06-06, inte hela dagen!

Samma med BETWEEN förstås. För att få hela dagen 2013-06-06 måste du skriva

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'

Varsågod, prova själv (eller se den 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. Hur man låser en rad för att välja i MySQL

  2. Hur man beräknar ålder i MariaDB

  3. SQL-frågakolumnen finns inte fel

  4. Returnerar ett värde 0 från en databasrad i PHP/MySQL efter en fråga