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
相关产品推荐
相关产品推荐

