• dwain.c (2/11/2013)


    If you don't like magic numbers, I think you can do it this way too:

    select

    a.DT,

    LastDayofMonth = dateadd(mm,datediff(mm,-1,a.DT),-1),

    LastSundayofMonth =

    dateadd(dd,(datediff(dd,'17530107',dateadd(mm,datediff(mm,-1,a.DT),-1))/7)*7,'17530107'),

    DwainsWay =

    1+dateadd(mm,datediff(mm,-1,a.DT),-1)-DATEPART(weekday, dateadd(mm,datediff(mm,-1,a.DT),-1))

    from

    ( -- Test data

    select DT = getdate()union all

    select DT = dateadd(mm,-2,getdate())union all

    select DT = dateadd(mm,-1,getdate())union all

    select DT = dateadd(mm,1,getdate())union all

    select DT = dateadd(mm,2,getdate())union all

    select DT = dateadd(mm,3,getdate())union all

    select DT = dateadd(mm,4,getdate())union all

    select DT = dateadd(mm,5,getdate())union all

    select DT = dateadd(mm,6,getdate())union all

    select DT = dateadd(mm,7,getdate())union all

    select DT = dateadd(mm,8,getdate())union all

    select DT = dateadd(mm,9,getdate())union all

    select DT = dateadd(mm,10,getdate())union all

    select DT = dateadd(mm,11,getdate())

    ) a

    order by

    a.DT

    Your code, "DwainsWay", is sensitive to the setting of DATEFIRST and to the setting for language.

    You can see what happens if you put either of these before your code.

    I don't see how you code eliminates "magic numbers", since it uses the same -1 (Date 18991231) as my code.

    set datefirst 4

    set language 'spanish'