首页 > 技术文章 > sql 自定义函数-返回第一个满周作为第一周的周数

3xin 2021-03-17 16:07 原文

ALTER FUNCTION [dbo].[wknum]
  (@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);
 --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
 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;
    return convert(varchar(2),@weeknum);
END

推荐阅读