没有端点的MySQL BETWEEN

use*_*531 12 mysql sql

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)