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

使用dateadd和getdate时能否跳过前一天?T-SQL查询需求

解决SQL Server中延迟一天获取过去7天数据的问题

首先明确你的需求:今日是4月5日时,要获取4月3日及往前7天的数据(也就是3月27日到4月3日的范围),核心是因为同步延迟,要跳过今日和昨天的数据,取到前天为止的7天记录。

你的原语句问题在于基准日期没调整对,而且误用了MySQL的interval语法(SQL Server不支持)。正确的写法可以这样调整:

SELECT 
    INCUNITS.INCNUM AS [Event ID]
FROM 
    INCUNITS   
WHERE 
    -- 基准日设为当前日期减2天(今日4月5日的话就是4月3日),再往前推7天作为起始点
    DISPDATE >= DATEADD(dd, -9, GETDATE()) 
    -- 同时限制数据截止到基准日(4月3日),避免包含未同步的后续数据
    AND DISPDATE <= DATEADD(dd, -2, GETDATE())
    AND INCUNITS.OSTIME > '0'

如果你的DISPDATE是纯日期类型(不带时分秒),也可以用更简洁的BETWEEN写法:

SELECT 
    INCUNITS.INCNUM AS [Event ID]
FROM 
    INCUNITS   
WHERE 
    DISPDATE BETWEEN DATEADD(dd, -9, GETDATE()) AND DATEADD(dd, -2, GETDATE())
    AND INCUNITS.OSTIME > '0'

日期计算说明

  • DATEADD(dd, -2, GETDATE()):把当前日期往前推2天,得到你要的截止日期(比如4月5日→4月3日)
  • DATEADD(dd, -9, GETDATE()):是截止日期再往前推7天(-2-7=-9),得到数据的起始日期(4月3日→3月27日)

额外优化建议

如果GETDATE()返回带时分秒的时间,可能会导致边界值遗漏(比如4月3日的晚些数据被过滤),建议先转成纯日期再计算,更精确:

DECLARE @CutoffDate DATE = CAST(DATEADD(dd, -2, GETDATE()) AS DATE)
SELECT 
    INCUNITS.INCNUM AS [Event ID]
FROM 
    INCUNITS   
WHERE 
    DISPDATE >= DATEADD(dd, -7, @CutoffDate)
    AND DISPDATE <= @CutoffDate
    AND INCUNITS.OSTIME > '0'

内容的提问来源于stack exchange,提问作者Lee.91

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 12:07:30