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

SQL Server中关联两表计算工作日日期差值的技术咨询

计算SQL Server中两张表的日期工作日差值

嘿,我来帮你搞定这个需求!要计算Transactions表的Date_Reported和Tran_Ex表的Date_Received之间的工作日差值(周一到周五,不含周末),我们可以通过关联两张表+日期计算的方式实现,下面是具体的方案:

基础版(仅排除周末)

首先我们需要通过customer_id关联两张表,然后用日期函数计算工作日差。这里的核心是先算总天数,再减去周末的天数,同时调整首尾日期刚好是周末的特殊情况:

SELECT 
    t.Date_Reported AS [Date Reported],
    te.Date_Received AS [Date Received],
    -- 计算工作日差值逻辑
    DATEDIFF(day, te.Date_Received, t.Date_Reported) 
    - (DATEDIFF(week, te.Date_Received, t.Date_Reported) * 2)
    - CASE WHEN DATENAME(weekday, te.Date_Received) = 'Sunday' THEN 1 ELSE 0 END
    - CASE WHEN DATENAME(weekday, t.Date_Reported) = 'Saturday' THEN 1 ELSE 0 END
    AS [Difference in days]
FROM Transactions t
INNER JOIN Tran_Ex te ON t.customer_id = te.customer_id
-- 可根据需求添加WHERE条件过滤,比如WHERE t.Date_Reported IS NOT NULL AND te.Date_Received IS NOT NULL

代码逻辑解释:

  • DATEDIFF(day, ...):得到两个日期之间的总天数
  • (DATEDIFF(week, ...)*2):计算两个日期跨度内包含的周末总天数(每周2天)
  • 最后两个CASE语句:如果起始日是周日,多减1天;如果结束日是周六,多减1天,避免把周末天数算进去

进阶版(排除周末+自定义节假日)

如果你的业务需要排除法定节假日,那我们需要先准备一个存储节假日的表(比如Holidays,包含HolidayDate字段),然后在计算时减去期间的节假日数量:

SELECT 
    t.Date_Reported AS [Date Reported],
    te.Date_Received AS [Date Received],
    -- 基础工作日计算
    (DATEDIFF(day, te.Date_Received, t.Date_Reported) 
    - (DATEDIFF(week, te.Date_Received, t.Date_Reported) * 2)
    - CASE WHEN DATENAME(weekday, te.Date_Received) = 'Sunday' THEN 1 ELSE 0 END
    - CASE WHEN DATENAME(weekday, t.Date_Reported) = 'Saturday' THEN 1 ELSE 0 END)
    -- 减去期间的节假日(排除周末的节假日,因为已经减过周末了)
    - (SELECT COUNT(*) 
      FROM Holidays h 
      WHERE h.HolidayDate BETWEEN te.Date_Received AND t.Date_Reported
        AND DATENAME(weekday, h.HolidayDate) NOT IN ('Saturday', 'Sunday'))
    AS [Difference in days]
FROM Transactions t
INNER JOIN Tran_Ex te ON t.customer_id = te.customer_id

额外提示

  • 如果Date_Reported可能早于Date_Received,差值会是负数,你可以用ABS()函数把结果转为非负:把整个计算表达式包在ABS(...)里即可
  • 确保两个日期字段都不为空,否则计算会得到NULL,可以用ISNULL()或者WHERE条件过滤空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:07:44