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%'更直观)。
