在 SQL 中,BETWEEN
运算符是包含起始值和结束值的两个临界值的。
其语法为:
column_name BETWEEN value1 AND value2
等价于:
column_name >= value1 AND column_name <= value2
示例
假设有一张表 Orders
,其中有一列 OrderAmount
,以下查询将返回 OrderAmount
在 100 和 200(包括 100 和 200)之间的记录:
SELECT *
FROM Orders
WHERE OrderAmount BETWEEN 100 AND 200;
如果想实现不包含临界值,可以使用以下方法:
不包含起始和结束值
SELECT *
FROM Orders
WHERE OrderAmount > 100 AND OrderAmount < 200;
包含起始值但不包含结束值
SELECT *
FROM Orders
WHERE OrderAmount >= 100 AND OrderAmount < 200;
不包含起始值但包含结束值
SELECT *
FROM Orders
WHERE OrderAmount > 100 AND OrderAmount <= 200;
BETWEEN
的时间比较
当 BETWEEN
用于比较时间时,同样包含起止值。也就是说:
time_column BETWEEN '2025-01-01 00:00:00' AND '2025-01-31 23:59:59'
等价于:
time_column >= '2025-01-01 00:00:00' AND time_column <= '2025-01-31 23:59:59'
示例
假设有一个表 Events
,包含一列 event_time
,以下查询会返回 event_time
在 2025 年 1 月 1 日至 2025 年 1 月 31 日(包括这两个时间点)之间的记录:
SELECT *
FROM Events
WHERE event_time BETWEEN '2025-01-01 00:00:00' AND '2025-01-31 23:59:59';
注意事项
- 日期范围的定义:时间点的精确度可能受数据库的时间类型影响。例如,如果
event_time
是DATE
类型(只保存日期,没有时间),那么2025-01-31
会被视为2025-01-31 00:00:00
,不包括当天的任何后续时间。 解决方案:可以手动调整结束值,例如:WHERE event_time BETWEEN '2025-01-01' AND '2025-01-31 23:59:59'
- 时间戳精度:如果字段是
DATETIME
或TIMESTAMP
类型,建议明确指定时间部分。 - 跨日期格式问题:确保日期格式符合数据库要求。例如,MySQL 通常使用
YYYY-MM-DD HH:MM:SS
。
不包含临界值
如果需要 不包含起止时间,可以调整条件表达式:
不包含起止值
SELECT *
FROM Events
WHERE event_time > '2025-01-01 00:00:00' AND event_time < '2025-01-31 23:59:59';
仅包含开始时间,不包含结束时间
SELECT *
FROM Events
WHERE event_time >= '2025-01-01 00:00:00' AND event_time < '2025-02-01 00:00:00';
总结
BETWEEN
默认包含起止值,若需排除某些临界值,可以通过调整条件表达式实现。