Numbers of weekdays in a date range in TSQL

后端 未结 4 1996
忘了有多久
忘了有多久 2021-01-06 07:07

This is harder than it looks. I need a function that calculates the numbers of a given weekday in a date range. I don\'t want any loops or recursive SQL. There are millions

4条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-06 07:43

    create function dbo.f_countweekdays
    (
      @DOW int, 
      @StartDate datetime, 
      @EndDate datetime
    ) 
    returns int
    begin
      return
      ( select datediff(wk, T2.St, T2.En) -
               case when T1.SDOW > @DOW then 1 else 0 end -
               case when T1.EDOW < @DOW then 1 else 0 end
        from (select datepart(dw, @StartDate),
                     datepart(dw, @EndDate)) as T1(SDOW, EDOW)
          cross apply (select dateadd(d, - T1.SDOW, @StartDate),
                              dateadd(d, 7 - T1.EDOW, @EndDate)) as T2(St, En))
    end
    

提交回复
热议问题