BETWEEN 是 MySQL 中表示闭区间的范围查询语法,等价于“>= 且

BETWEEN 是 MySQL 中用于范围查询的简洁语法,等价于两个条件的组合(>= 且 ),常用于数字、日期、字符串等类型的连续区间筛选。
基本语法与等价写法
BETWEEN 的标准写法是:column BETWEEN value1 AND value2,表示列值在 value1 到 value2 之间(含端点)。它等价于:column >= value1 AND column 。
- 注意:BETWEEN 是**闭区间**,两端值都会被包含
- value1 必须小于或等于 value2,否则结果恒为空(MySQL 不报错但不返回数据)
- 可用于数值、日期时间(如
DATETIME)、字符类型(按字典序比较)
数值范围查询示例
查出价格在 50 到 200 元之间的商品:
SELECT * FROM products WHERE price BETWEEN 50 AND 200;
等价写法:
SELECT * FROM products WHERE price >= 50 AND price <= 200;
若想排除边界(如只查 51~199),就不能用 BETWEEN,需手动改写为 > 50 AND 。
日期范围查询常用场景
查 2024 年整年的订单(假设 order_time 是 DATETIME 类型):
SELECT * FROM orders WHERE order_time BETWEEN '2024-01-01' AND '2024-12-31 23:59:59';
⚠️ 注意:如果字段含时间部分,仅写 '2024-12-31' 相当于 '2024-12-31 00:00:00',会漏掉当天其他时间的数据。更安全的做法是用左闭右开:>= '2024-01-01' AND ,但 BETWEEN 本身不支持开区间。
配合 NOT 使用排除范围
查价格**不在** 100~150 区间的商品:
SELECT * FROM products WHERE price NOT BETWEEN 100 AND 150;
等价于:price 150。适合快速过滤“异常值”或“非主流区间”。
字符串也能用 BETWEEN(按排序规则)
查姓名以 A~M 开头的用户(基于默认字符集排序):
SELECT * FROM users WHERE name BETWEEN 'A' AND 'Mz';
⚠️ 字符串比较依赖排序规则(collation),且 'M' 和 'Mz' 边界需谨慎测试。例如 'Ma'、'Mn' 都满足,但 'Mz' 是为了覆盖所有 M 开头的常见情况(实际建议用 LIKE 'M%' 更直观)。










