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

SQL Server 2014:7天前加1小时日期范围参数化查询遇阻

问题分析与解决方案

你的核心问题在于getdate()返回的是包含当前时分秒的完整时间戳,所以DateAdd(DAY, -7, getdate())得到的是7天前的同一时刻(比如现在是2024-05-20 14:30,这个表达式会返回2024-05-13 14:30),而不是你需要的7天前午夜0点,这就导致起始时间和你硬编码的'2018-04-04 00:01:000'完全不匹配,自然查不到预期结果。

正确的参数化写法

我们需要先把getdate()截断到日期部分(去掉时分秒),得到当天的午夜0点,再基于这个时间计算起始和结束参数:

-- 声明参数
DECLARE @StartDate DATETIME, @EndDate DATETIME;

-- 计算7天前午夜过后1小时(如果你的需求是午夜过1分钟,把HOUR改成MINUTE、值改成1即可)
SET @StartDate = DATEADD(HOUR, 1, CAST(DATEADD(DAY, -7, CAST(GETDATE() AS DATE)) AS DATETIME));

-- 计算今天午夜过后1小时(和你硬编码的结束时间逻辑一致)
SET @EndDate = DATEADD(HOUR, 1, CAST(CAST(GETDATE() AS DATE) AS DATETIME));

-- 执行查询
SELECT * 
FROM Table 
WHERE BusinessDay >= @StartDate 
  AND BusinessDay <= @EndDate;

代码说明

  • CAST(GETDATE() AS DATE):将当前时间截断为日期(比如2024-05-20),自动去掉时分秒;
  • 再转成DATETIME类型就得到当天的午夜0点(2024-05-20 00:00:00);
  • 在此基础上减7天,就得到7天前的午夜0点,再加1小时就是你要的起始时间;
  • 结束时间同理,得到今天的午夜0点加1小时,和你硬编码的'2018-04-11 00:01:000'逻辑完全对齐。

如果你的需求是结束时间到当前时刻而非今天的午夜过1小时,只需要把@EndDate的赋值改成SET @EndDate = GETDATE();即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:58:51