如何修正计算两日期差值(排除周日)的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
相关产品推荐
相关产品推荐

