• These return different results for the end of months preceding a month that has more days in it. For instance January has 31 days, and February only 28 or 29 days.

    Here is an example:

    DECLARE @d datetime;

    SET @d = '01/29/2009';

    -- Last day of month

    SELECT

    dateadd(day,-(datepart(day,@d)),dateadd(mm,1,@d)),

    -- Returns 2009-01-30 00:00:00.000, incorrect

    dateadd(day,-(datepart(day,dateadd(mm,1,@d))),dateadd(mm,1,@d));

    -- Returns 2009-01-31 00:00:00.000, correct