使用带有日期的MySql between子句

时间:2013-06-06 14:27:46

标签: mysql

我一直有这个问题,为了澄清,当使用mysql between子句时,它是包含参数还是仅包含它们之间的值,例如:

where date between '2013-06-01' and '2013-06-06'

上述声明是否包含日期为2013-06-01的值,或仅包含“2013-06-02”的值,如果声明保持不变,会发生什么情况,但日期值有几小时他们会将MySql自动发表声明

3 个答案:

答案 0 :(得分:3)

Fabio实际上是不对的,如果这个

包括小时,分钟和秒
where date >= '2013-06-01' and date <= '2013-06-06'

变成内部

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

所以你实际上只选择2013-06-06的1秒,一整天!

当然与BETWEEN相同。要获得2013-06-06的整天,你必须写

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

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

来吧,亲自尝试(或者在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 :(得分:2)

我认为你的专栏有DATETIME格式。这将包括实际开始时间和结束时间。它由mysql解释,因为它是

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

如果包含小时,分钟和秒,它将采用与示例中完全相同的方式。

答案 2 :(得分:0)

http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#operator_between处的文档说明范围是包容性的:

  

如果expr大于或等于min且expr小于或等于max,则BETWEEN返回1,否则返回0.这相当于表达式(min&lt; = expr AND expr&lt; = max)如果所有参数都是相同的类型。