为了澄清起见,我一直对此有疑问,在使用 mysql between 子句时,它是否包含参数或仅包含它们之间的值,例如:
where date between '2013-06-01' and '2013-06-06'
上述语句是否也包括日期为 2013-06-01 的值或仅来自“2013-06-02”的值,如果语句保持原样,但日期值中包含小时,会发生什么情况? MySql 自动分到这条语句
为了澄清起见,我一直对此有疑问,在使用 mysql between 子句时,它是否包含参数或仅包含它们之间的值,例如:
where date between '2013-06-01' and '2013-06-06'
上述语句是否也包括日期为 2013-06-01 的值或仅来自“2013-06-02”的值,如果语句保持原样,但日期值中包含小时,会发生什么情况? MySql 自动分到这条语句
法比奥其实是不对的,如果将小时、分钟和秒都包括在内的话
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*/
我想你的专栏有 DATETIME 格式。这将包括实际开始时间和结束时间。它被mysql原样解释
where date >= '2013-06-01' and date <= '2013-06-06'
如果将包含小时、分钟和秒,则其行为方式与示例中的完全相同。
http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#operator_between的文档指出范围是包容性的:
如果 expr 大于或等于 min 并且 expr 小于或等于 max,则 BETWEEN 返回 1,否则返回 0。这相当于表达式 (min <= expr AND expr <= max) 如果所有参数都是同类型。