15

MySQL 的 BETWEEN 包括两个端点之间的所有结果以及端点

如果 expr 大于或等于 min 并且 expr 小于或等于 max,则 BETWEEN 返回 1,否则返回 0。这相当于表达式 (min <= expr AND expr <= max) 如果所有参数都是同类型。参考- http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

是否有一个REALLYBETWEEN不包括端点的函数,或者我被困在使用min < expr AND expr < max

4

2 回答 2

17

我想你可以自己写成:

where val > start and val < end

之间是:

where val >= start and val <= end

至于索引,前两个应该正确使用索引并且与 相同between,假设 start 和 end 是常量。我不确定最后一个版本是否会。

如果 val 是一个复杂的表达式,请考虑以下内容:

select *
from (your query here) t
where t.val > start and t.val < end

这应该只评估val一次。我认为其他形式会对其进行两次评估。

或者,您可以这样做:

where val between start and end and val not in (start, end)
于 2013-01-22T15:13:20.617 回答
1

请注意,这BETWEEN是一个表达式,而不是一个函数。这只是一种编码方便,意思就是所说的。没有性能优势。

要排除端点,您必须自己编写代码。

于 2013-01-22T15:16:28.117 回答