• What happens if your initial FROMdate or TOdate happen to be a sunday? This batch shows solutions either way:

    -- Recalculating startdate

    ;WITH SampleData AS (

    SELECT TheDate = CAST('06 Jan 2013' AS DATE) UNION ALL

    SELECT TheDate = '07 Jan 2013' UNION ALL -- StartDate

    SELECT TheDate = '08 Jan 2013' UNION ALL

    SELECT TheDate = '09 Jan 2013' UNION ALL

    SELECT TheDate = '10 Jan 2013' UNION ALL

    SELECT TheDate = '11 Jan 2013' UNION ALL

    SELECT TheDate = '12 Jan 2013' UNION ALL

    SELECT TheDate = '13 Jan 2013' UNION ALL

    SELECT TheDate = '14 Jan 2013' UNION ALL

    SELECT TheDate = '15 Jan 2013' UNION ALL

    SELECT TheDate = '16 Jan 2013' UNION ALL

    SELECT TheDate = '17 Jan 2013' UNION ALL

    SELECT TheDate = '18 Jan 2013' UNION ALL

    SELECT TheDate = '19 Jan 2013' UNION ALL

    SELECT TheDate = '20 Jan 2013' UNION ALL

    SELECT TheDate = '21 Jan 2013'

    )

    SELECT

    DATENAME(weekday,TheDate),

    TheDate,

    FirstSundayAfterTheDate1 = DATEADD(dd,6-DATEDIFF(dd,7,TheDate)%7,TheDate), -- use this

    FirstSundayAfterTheDate2 = DATEADD(dd,7-DATEDIFF(dd,6,TheDate)%7,TheDate) -- or this

    FROM SampleData

    CROSS APPLY ( -- workings - helps to explain the solution

    SELECT

    calc1 = DATEDIFF(dd,7,TheDate),

    calc2 = 6-DATEDIFF(dd,7,TheDate)%7

    ) x

    -- Recalculating enddate

    ;WITH SampleData AS (

    SELECT TheDate = CAST('06 Mar 2013' AS DATE) UNION ALL

    SELECT TheDate = '07 Mar 2013' UNION ALL

    SELECT TheDate = '08 Mar 2013' UNION ALL

    SELECT TheDate = '09 Mar 2013' UNION ALL

    SELECT TheDate = '10 Mar 2013' UNION ALL

    SELECT TheDate = '11 Mar 2013' UNION ALL

    SELECT TheDate = '12 Mar 2013' UNION ALL

    SELECT TheDate = '13 Mar 2013' UNION ALL

    SELECT TheDate = '14 Mar 2013' UNION ALL

    SELECT TheDate = '15 Mar 2013' UNION ALL

    SELECT TheDate = '16 Mar 2013' UNION ALL

    SELECT TheDate = '17 Mar 2013' UNION ALL

    SELECT TheDate = '18 Mar 2013' UNION ALL -- enddate

    SELECT TheDate = '19 Mar 2013' UNION ALL

    SELECT TheDate = '20 Mar 2013' UNION ALL

    SELECT TheDate = '21 Mar 2013'

    )

    SELECT

    DATENAME(weekday,TheDate),

    TheDate,

    calc1 = DATEDIFF(dd,6,TheDate),

    calc2 = DATEDIFF(dd,6,TheDate)%7,

    LastSundayBeforeEnddate1 = DATEADD(dd,0-DATEDIFF(dd,6,TheDate)%7,TheDate), -- use this

    LastSundayBeforeEnddate2 = DATEADD(dd,-1-DATEDIFF(dd,7,TheDate)%7,TheDate) -- or this

    FROM SampleData

    “Write the query the simplest way. If through testing it becomes clear that the performance is inadequate, consider alternative query forms.” - Gail Shaw

    For fast, accurate and documented assistance in answering your questions, please read this article.
    Understanding and using APPLY, (I) and (II) Paul White
    Hidden RBAR: Triangular Joins / The "Numbers" or "Tally" Table: What it is and how it replaces a loop Jeff Moden