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
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