SQL BETWEEN 是闭区间吗?边界验证

11次阅读

SQL的BETWEEN是闭区间,包含左右边界值;例如WHERE age BETWEEN 18 AND 25等价于WHERE age >= 18 AND age

SQL BETWEEN 是闭区间吗?边界验证

是的,sqlBETWEEN 是闭区间,包含左右两个边界值。

什么是闭区间?

闭区间表示范围包含起始值和结束值。例如 WHERE age BETWEEN 18 AND 25 等价于 WHERE age >= 18 AND age ,会匹配 age = 18 和 age = 25 的所有记录。

边界验证方法

可以通过构造明确的边界测试数据来验证:

  • 插入三条测试数据:值为边界左值(如 18)、边界右值(如 25)、以及刚好越界(如 17 或 26)
  • 执行 BETWEEN 查询,观察结果是否包含左右边界值
  • 对比等价写法:BETWEEN a AND b>= a AND 应返回完全相同的结果集

注意事项

虽然语义上是闭区间,但实际结果还受数据类型和比较规则影响:

  • 字符串比较依赖排序规则(collation),例如大小写敏感时 'Apple' BETWEEN 'apple' AND 'banana' 可能不成立
  • 日期时间类型要注意精度,'2023-01-01' BETWEEN '2023-01-01' AND '2023-01-01' 成立,但 '2023-01-01 12:00' BETWEEN '2023-01-01' AND '2023-01-01' 可能不成立(因隐式转换或截断)
  • NULL 值不会被匹配:任何与 NULL 的比较(包括 BETWEEN 中的边界或字段值)都会返回 UNKNOWN,该行被排除

反向验证:用 NOT BETWEEN

NOT BETWEEN a AND b 等价于 b,即排除闭区间内所有值(含边界)。如果某值等于 a 或 b,它一定不会出现在 NOT BETWEEN 结果中——这也从反面印证了 BETWEEN 的闭区间特性。

text=ZqhQzanResources