SQL Server 依据配置时间间隔筛选符合条件记录的问题求助
问题原因分析
- 原SQL中
DATEDIFF函数参数使用错误:SQL Server中DATEDIFF语法为DATEDIFF(datepart, startdate, enddate),你传入的第二个参数为数字10,不符合日期类型要求,计算逻辑完全错误 - 时间叠加逻辑不对:你需要的是给创建时间叠加10天+8小时30分,再和当前时间比较,原语句的时间拼接逻辑不符合需求
正确查询写法
如果直接硬编码满足10天8小时30分的条件,语句如下:
SELECT * FROM [Table] WHERE DATEADD(minute, 8*60 + 30, DATEADD(day, 10, CreatedDate)) <= GETDATE()
如果你需要直接读取配置项RetIntervel = '10,8.30 PM'动态计算,可先拆分配置值再做时间计算:
SELECT * FROM [Table] CROSS APPLY ( SELECT -- 拆分配置的天数部分 Days = CAST(PARSENAME(REPLACE(RetIntervel, ',', '.'), 2) AS INT), -- 拆分配置的时间部分转成分钟数 TimeMinutes = DATEDIFF(minute, '00:00:00', CAST(REPLACE(PARSENAME(REPLACE(RetIntervel, ',', '.'), 1), '.', ':') AS DATETIME)) ) AS Config WHERE DATEADD(minute, Config.TimeMinutes, DATEADD(day, Config.Days, CreatedDate)) <= GETDATE()
逻辑说明
- 先给
CreatedDate叠加10天,再叠加8小时30分(即510分钟),得到目标截止时间 - 只要当前时间
GETDATE()大于等于这个截止时间,就满足“总时长满10天加8小时30分”的要求
内容的提问来源于stack exchange,提问作者Pradeep Kumar
相关产品推荐
相关产品推荐

