ALTER FUNCTION [dbo].[wknum]
(@date datetime)
RETURNS int
AS
BEGIN
(@date datetime)
RETURNS int
AS
BEGIN
declare @weeknum int
declare @weekday int
declare @first_date_of_week datetime
declare @date_of_full_week datetime
declare @strDate datetime
set @weekday=datepart(weekday,@date);
set @weekday=case when @weekday=1 then 8 else @weekday end;
set @first_date_of_week=dateadd(day,-(@weekday-2), @date);
set @strDate=convert(char(4),year(@first_date_of_week)) +'-01-01';
set @weekday=datepart(weekday,@strDate);
set @weeknum=datepart(week,@first_date_of_week);
declare @weekday int
declare @first_date_of_week datetime
declare @date_of_full_week datetime
declare @strDate datetime
set @weekday=datepart(weekday,@date);
set @weekday=case when @weekday=1 then 8 else @weekday end;
set @first_date_of_week=dateadd(day,-(@weekday-2), @date);
set @strDate=convert(char(4),year(@first_date_of_week)) +'-01-01';
set @weekday=datepart(weekday,@strDate);
set @weeknum=datepart(week,@first_date_of_week);
--Date weekday addDays date_of_full_week
--2018-1-1 2 0 2018-1-1
--2017-1-1 1 1 2017-1-2
--2011-1-1 7 2 2011-1-3
--2021-1-1 6 3 2021-1-4
--2015-1-1 5 4 2015-1-5
--2020-1-1 4 5 2020-1-6
--2019-1-1 3 6 2019-1-7
--2018-1-1 2 0 2018-1-1
--2017-1-1 1 1 2017-1-2
--2011-1-1 7 2 2011-1-3
--2021-1-1 6 3 2021-1-4
--2015-1-1 5 4 2015-1-5
--2020-1-1 4 5 2020-1-6
--2019-1-1 3 6 2019-1-7
set @date_of_full_week=dateadd(day,(case when @weekday>=3 then 9 else 2 end)-@weekday,@strDate);
set @weeknum=case when datepart(week,@date_of_full_week)=2 then @weeknum-1 else @weeknum end;
set @weeknum=case when datepart(week,@date_of_full_week)=2 then @weeknum-1 else @weeknum end;
return convert(varchar(2),@weeknum);
END
END