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

如何修正计算两日期差值(排除周日)的SQL查询错误?

修正计算日期差并排除周日的SQL代码

原代码错误地将周六和周日都纳入排除范围,且对周日的计数逻辑存在偏差,导致起始/结束日期为周日时结果错误。以下是修正后的代码:

DECLARE @totaldays INT, 
        @sundayCount INT, 
        @startDate datetime = '2023/01/01', 
        @endDate datetime = '2023/01/08'

SET @totaldays = DATEDIFF(DAY, @startDate, @endDate) + 1 
SET @sundayCount = DATEDIFF(WEEK, @startDate, @endDate) + 
                    CASE 
                        WHEN DATEPART(WEEKDAY, @startDate) = 1 
                            THEN 1 
                            ELSE 0 
                    END

SELECT (@totaldays - @sundayCount) AS Days

逻辑说明:

  • @totaldays:保持原有逻辑,计算包含起始和结束日期在内的总天数。
  • @sundayCount:
    • DATEDIFF(WEEK, @startDate, @endDate):统计两个日期之间跨越的完整周数,每周对应1个周日。
    • CASE语句:如果起始日期本身是周日(DATEPART(WEEKDAY, @startDate) = 1),额外加1,因为这个周日未被完整周计数覆盖。

测试验证:

  • 当@startDate='2023/01/01'、@endDate='2023/01/08'时,总天数为8,周日数量为2,计算得8-2=6,符合预期。
  • 当@endDate='2023/01/07'时,总天数为7,周日数量为1,计算得7-1=6,结果正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:55:32