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

如何在MS SQL中查询当前月份两个月前整月的记录

MS SQL 查询当前月份两个月前整月记录的实现方案

没问题,这在MS SQL里有几种简洁且高效的实现方式,我给你整理了两个常用方案,适配不同的场景需求:

方案一:直观构造起止日期(适合新手理解)

这种方式先明确算出目标月份的第一天和最后一天,逻辑清晰,可读性强:

-- 定义两个月前月份的起始和结束日期
DECLARE @TargetMonthStart DATE = DATEFROMPARTS(
    YEAR(DATEADD(MONTH, -2, GETDATE())),
    MONTH(DATEADD(MONTH, -2, GETDATE())),
    1
);
DECLARE @TargetMonthEnd DATE = EOMONTH(@TargetMonthStart);

-- 查询目标月份的所有记录
SELECT *
FROM YourTableName
WHERE YourDateColumn >= @TargetMonthStart
  -- 用小于下一天的方式,避免时间部分导致的遗漏(比如datetime类型的23:59:59记录)
  AND YourDateColumn < DATEADD(DAY, 1, @TargetMonthEnd);

方案二:无变量简洁写法(性能更优)

如果追求代码紧凑且高效,可以直接用日期函数嵌套计算,这种写法能更好地利用日期列的索引:

SELECT *
FROM YourTableName
WHERE 
  -- 两个月前的月初
  YourDateColumn >= DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 2, 0)
  -- 一个月前的月初(相当于目标月份的下一天,确保包含整月)
  AND YourDateColumn < DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()) - 1, 0);

关键注意事项

  • 如果你的日期列是datetime/datetime2类型(包含时间部分),务必使用< 下一个月第一天而非<= 当月最后一天,否则会漏掉当天晚于23:59:59的记录(SQL Server的datetime精度为3.33毫秒,可能存在边界问题)。
  • 若业务需要基于UTC时间计算,把GETDATE()替换为GETUTCDATE()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:33:09