/* Created by free online sql formatter */

CREATE FUNCTION dbo.isoweek
               (@DATE DATETIME)
RETURNS INT
WITH EXECUTE AS caller
AS
  BEGIN
    DECLARE  @ISOweek INT
    
    SET @ISOweek = Datepart(wk,@DATE) + 1 - Datepart(wk,CAST(Datepart(yy,@DATE) AS CHAR(4)) + '0104')
    
    --Special cases: Jan 1-3 may belong to the previous year
    IF (@ISOweek = 0)
      SET @ISOweek = dbo.Isoweek(CAST(Datepart(yy,@DATE) - 1 AS CHAR(4)) + '12' + CAST(24 + Datepart(DAY,@DATE) AS CHAR(2))) + 1
    
    --Special case: Dec 29-31 may belong to the next year
    IF ((Datepart(mm,@DATE) = 12)
        AND ((Datepart(dd,@DATE) - Datepart(dw,@DATE)) >= 28))
      SET @ISOweek = 1
    
    RETURN (@ISOweek)
  END;