贝利信息

mysql中BETWEEN操作符进行范围查询的使用

日期:2026-01-11 00:00 / 作者:P粉602998670
BETWEEN是闭区间,包含边界值,严格等价于col >= low AND col

MySQL中BETWEEN是闭区间,包含边界值

很多人误以为BETWEEN是“左开右闭”或受NULL影响行为异常,其实它严格等价于col >= low AND col ,两端都包含。只要lowhigh可比较、类型兼容,且不为NULL,结果就确定。

常见错误现象:

BETWEEN>=/在索引使用上完全等价

优化器对BETWEEN的处理和显式写col >= a AND col 一样,只要列上有索引,且条件不含函数或表达式,就能走范围扫描(type: range)。

实操建议:

字符串和日期用BETWEEN要特别注意排序规则和精度

字符串比较依赖当前列的collation,比如utf8mb4_0900_as_cs区分大小写和重音,而utf8mb4_general_ci不区分。这直接影响BETWEEN 'a' AND 'z'是否包含'Z''é'

日期时间类型更要小心:

遇到NULLBETWEEN直接返回UNKNOWN

这是SQL三值逻辑的体现:NULL BETWEEN 1 AND 10既不是TRUE也不是FALSE,而是UNKNOWN,所以该行不会出现在查询结果中——和WHERE子句里所有UNKNOWN都被过滤掉一致。

这意味着:

边界值类型隐式转换、时区上下文、索引生效前提,这三个地方最容易被忽略。写完BETWEEN语句后,务必用EXPLAIN看执行计划,并用SELECT ... LIMIT 5验证实际返回的数据是否符合预期时间/字符范围。