在 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_timeDATE 类型(只保存日期,没有时间),那么 2025-01-31 会被视为 2025-01-31 00:00:00,不包括当天的任何后续时间。 解决方案:可以手动调整结束值,例如: WHERE event_time BETWEEN '2025-01-01' AND '2025-01-31 23:59:59'
  • 时间戳精度:如果字段是 DATETIMETIMESTAMP 类型,建议明确指定时间部分。
  • 跨日期格式问题:确保日期格式符合数据库要求。例如,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 默认包含起止值,若需排除某些临界值,可以通过调整条件表达式实现。