You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中BETWEEN运算符的用法及查询简化可行性咨询

如何在SQL Server中使用BETWEEN运算符?

BETWEEN是SQL Server里用来筛选列值落在**闭区间(包含起始和结束值)**内的常用运算符,语法非常直观:

column_name BETWEEN value_start AND value_end

它等价于column_name >= value_start AND column_name <= value_end,不过要注意必须保证value_start小于等于value_end,否则查询会返回空结果。

举个实际例子,假设你要从Sales表中筛选出2023年全年的销售记录:

SELECT * FROM Sales
WHERE SaleDate BETWEEN '2023-01-01' AND '2023-12-31';

注意日期时间类型的坑:
如果SaleDate是datetime或datetime2类型,'2023-12-31'会被默认解析为2023-12-31 00:00:00.000,所以上面的查询会漏掉2023年12月31日当天0点之后的所有记录。如果要包含全天的数据,你可以改成:

SELECT * FROM Sales
WHERE SaleDate BETWEEN '2023-01-01' AND '2023-12-31 23:59:59.997';

或者更稳妥的写法(避免毫秒精度问题):

SELECT * FROM Sales
WHERE SaleDate >= '2023-01-01' AND SaleDate < '2024-01-01';

能否用BETWEEN简化to < GETDATE() 或 GETDATE() < from的查询?

当然可以!不过得换个思路——你的原条件是筛选当前时间不在[from, to]区间内的数据,而BETWEEN本身是匹配区间内的,所以用NOT BETWEEN就能完美等价替换。

先拆解原条件的逻辑:

  • to < GETDATE():当前时间晚于to的时间
  • GETDATE() < from:当前时间早于from的时间
    两者用OR连接,本质就是“当前时间不在from到to的闭区间里”。

对应的简化写法:

-- 原条件
WHERE [to] < GETDATE() OR GETDATE() < [from]

-- 简化后的等价写法
WHERE GETDATE() NOT BETWEEN [from] AND [to]

几个要注意的细节:

  1. from和to是SQL Server的关键字,所以要用方括号[]把它们括起来,避免语法错误;
  2. NOT BETWEEN的逻辑是NOT (GETDATE() >= [from] AND GETDATE() <= [to]),根据德摩根定律,这完全等价于你的原条件;
  3. 同样要注意日期时间的边界问题,如果to是包含时分秒的类型,NOT BETWEEN里的<= [to]刚好对应原条件中[to] < GETDATE()的反向逻辑,不会出现数据遗漏。

内容的提问来源于stack exchange,提问作者omega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:27:53