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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:06:07