5

为了澄清起见,我一直对此有疑问,在使用 mysql between 子句时,它是否包含参数或仅包含它们之间的值,例如:

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

上述语句是否也包括日期为 2013-06-01 的值或仅来自“2013-06-02”的值,如果语句保持原样,但日期值中包含小时,会发生什么情况? MySql 自动分到这条语句

4

3 回答 3

3

法比奥其实是不对的,如果将小时、分钟和秒都包括在内的话

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*/
于 2013-06-06T15:05:37.797 回答
2

我想你的专栏有 DATETIME 格式。这将包括实际开始时间和结束时间。它被mysql原样解释

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

如果将包含小时、分钟和秒,则其行为方式与示例中的完全相同。

于 2013-06-06T14:30:01.717 回答
0

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) 如果所有参数都是同类型。

于 2013-06-06T14:37:12.480 回答