贝利信息

between语法是否包含边界_mysql范围判断规则

日期:2026-01-03 00:00 / 作者:P粉602998670
MySQL的BETWEEN是闭区间操作符,包含边界值;但时间字段需注意时区、精度及隐式补零问题,推荐用>=和

MySQL 的 BETWEEN 是否包含边界值

包含。MySQL 中的 BETWEEN 是**闭区间**操作符,等价于 value >= min AND value ,左右边界都参与匹配。

BETWEEN 在 WHERE 子句中的实际行为

它常用于数值、日期、字符串范围过滤,但要注意类型隐式转换和排序规则的影响:

SELECT * FROM orders 
WHERE created_at BETWEEN '2025-01-01' AND '2025-01-31';

该语句包含 '2025-01-01 00:00:00''2025-01-31 00:00:00',但不包含 '2025-01-31 23:59:59' —— 因为时间部分未显式指定,默认补零。

容易被忽略的时区与精度陷阱

当字段是 DATETIMETIMESTAMP 时,BETWEEN 的边界行为受以下因素干扰:

SELECT * FROM events 
WHERE event_time BETWEEN '2025-01-01 00:00:00.000000' 
                     AND '2025-01-01 23:59:59.999999';

替代写法更可控的场景

当需要明确控制开闭性、避免隐式转换或提升可读性时,建议显式用 >=

边界包含本身没问题,但真正出问题的,往往是没意识到时间精度、时区、字符排序这些“默认行为”。