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?
Gor*_*off 16
我想你可以自己写一下:
where val > start and val < end
Run Code Online (Sandbox Code Playgroud)
之间是:
where val >= start and val <= end
Run Code Online (Sandbox Code Playgroud)
对于索引,between假设start和end是常量,前两个应该正确使用索引并且相同.我不确定最后一个版本是否会.
如果val是一个复杂的表达式,那么请考虑以下内容:
select *
from (your query here) t
where t.val > start and t.val < end
Run Code Online (Sandbox Code Playgroud)
这应该val只评估一次.我认为其他形式会对它进行两次评估.
或者,您可以这样做:
where val between start and end and val not in (start, end)
Run Code Online (Sandbox Code Playgroud)