• Hmmm that is my function similiar to above but IMHO easier to understand

    CREATE FUNCTION ISOweek(@date datetime)

    RETURNS int

    AS

    BEGIN

    declare @dayOfWeek int

    declare @1ThISOWeek1ThDay datetime

    declare @4ThJan datetime

    declare @1ThJan datetime

    declare @31ThDec datetime

    declare @numberOfISOweeks int

    declare @Tmp int

    declare @returnValue as int

    set @4ThJan = cast(CAST(YEAR(@date) AS CHAR(4)) + '-01-04' as datetime)

    set @1ThJan = cast(CAST(YEAR(@date) AS CHAR(4)) + '-01-01' as datetime)

    set @31ThDec = cast(CAST(YEAR(@date) AS CHAR(4)) + '-12-31' as datetime)

    --"rule of thursday"

    if (DATEPART(dw, @1ThJan) = 5 or DATEPART(dw, @31ThDec) = 5 )

    set @numberOfISOweeks = 53

    else

    set @numberOfISOweeks = 52

    set @dayOfWeek = (select DATEPART(dw, @4ThJan) - 1)

    if @dayOfWeek = 0

    set @dayOfWeek = 7

    set @1ThISOWeek1ThDay = (select DATEADD(day, -(@dayOfWeek -1) ,@4ThJan))

    if @date @numberOfISOweeks

    set @returnValue = 1 -- or -1 as an error

    return @returnValue

    END