我一直有这个问题,为了澄清,当使用mysql between子句时,它是包含参数还是仅包含它们之间的值,例如:
where date between '2013-06-01' and '2013-06-06'
上述声明是否包含日期为2013-06-01的值,或仅包含“2013-06-02”的值,如果声明保持不变,会发生什么情况,但日期值有几小时他们会将MySql自动发表声明
答案 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)如果所有参数都是相同的类型。