如何在SQL Server中计算日期间隔天数并按30/60/90天筛选条目
解决方案
SQL Server 中计算两个日期的间隔天数直接使用内置函数 DATEDIFF() 即可,语法如下:
DATEDIFF(day, 开始日期, 结束日期)
你需要计算条目日期TxDate和用户选定日期的间隔,直接按如下方式调用:
-- 返回值为两个日期相差的天数 DATEDIFF(day, TxDate, @用户选定日期)
完整改造后的查询示例
你可以先声明变量存储用户选定的日期,后续只要修改这个变量值即可,不需要改整个查询逻辑。如果需要同时输出30/60/90天三个区间的余额,可以用条件聚合实现:
-- 声明变量存储用户选定的日期,直接修改此处的值即可 DECLARE @SelectedDate DATE = '2021-11-30' SELECT Account, DCBalance, -- 30天内的余额:间隔天数<=30 SUM(CASE WHEN DATEDIFF(day, TxDate, @SelectedDate) <=30 THEN Credit - Debit ELSE 0 END) AS '30day', -- 31-60天的余额 SUM(CASE WHEN DATEDIFF(day, TxDate, @SelectedDate) BETWEEN 31 AND 60 THEN Credit - Debit ELSE 0 END) AS '60day', -- 61-90天的余额 SUM(CASE WHEN DATEDIFF(day, TxDate, @SelectedDate) BETWEEN 61 AND 90 THEN Credit - Debit ELSE 0 END) AS '90day' FROM [Graceland Estates BC].[dbo].[PostGL] AS gl INNER JOIN [Graceland Estates BC].[dbo].[Client] ON gl.DrCrAccount = Client.DCLink WHERE DrCrAccount = 15 AND AccountLink <> '2' -- 筛选90天内的记录,减少计算量 AND TxDate >= DATEADD(day, -90, @SelectedDate) AND TxDate <= @SelectedDate GROUP BY Account, DCBalance
注意事项
DATEDIFF的日期顺序不要写反,否则会得到负数的间隔天数- 日期值在SQL中需要用单引号包裹,你原有查询中的
TxDate > 2021-11-30是错误写法,会被识别为数字运算2021减11减30,无法正确匹配日期 - 如果只要单独筛选某一个区间的条目,直接在WHERE条件中加对应的
DATEDIFF(day, TxDate, @SelectedDate) = 目标天数或者区间判断即可
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

