DECLARE @date DATE = '20121202';SELECT CASE WHEN datename(dw,@date) <> 'Sunday' THEN CONVERT(varchar(10), DATEADD(WK, DATEDIFF(WK, 0, @date), 0), 103) ELSE CONVERT(varchar(10), DATEADD(WK, DATEDIFF(WK, 0, @date), - 7), 103) ENDgoDECLARE @date DATE = '20121203';SELECT CASE WHEN datename(dw,@date) <> 'Sunday' THEN CONVERT(varchar(10), DATEADD(WK, DATEDIFF(WK, 0, @date), 0), 103) ELSE CONVERT(varchar(10), DATEADD(WK, DATEDIFF(WK, 0, @date), - 7), 103) ENDgoDECLARE @date DATE = '20121202';select dateadd(wk, datediff(wk, 0, DATEADD(dd,-1,@Date)), 0);GODECLARE @date DATE = '20121203';select dateadd(wk, datediff(wk, 0, DATEADD(dd,-1,@Date)), 0);GO
CASE WHEN DATEPART(dw, THE_DATE) = 1 THEN DATEADD(dd, -6, THE_DATE) ELSE DATEADD(dd, 0 - (DATEPART(dw, THE_DATE) - 2), THE_DATE)END
DECLARE @date DATE = '20121202';select dateadd(wk, datediff(wk, 0, DATEADD(dd,-1,@Date)), 0);GODECLARE @date DATE = '20121203';select dateadd(wk, datediff(wk, 0, DATEADD(dd,-1,@Date)), 0);GO
select a.*, Monday = dateadd(dd,(datediff(dd,-53690,a.DATE)/7)*7,-53690)from ( -- Test Data select [Date] = getdate()-2 union all select [Date] = getdate()-1 union all select [Date] = getdate() union all select [Date] = getdate()+1 union all select [Date] = getdate()+2 union all select [Date] = getdate()+3 union all select [Date] = getdate()+4 union all select [Date] = getdate()+5 union all select [Date] = getdate()+6 union all select [Date] = getdate()+7 union all select [Date] = getdate()+8 ) aorder by a.[Date]
Date Monday----------------------- -----------------------2012-12-02 13:05:22.770 2012-11-26 00:00:00.0002012-12-03 13:05:22.803 2012-12-03 00:00:00.0002012-12-04 13:05:22.803 2012-12-03 00:00:00.0002012-12-05 13:05:22.803 2012-12-03 00:00:00.0002012-12-06 13:05:22.803 2012-12-03 00:00:00.0002012-12-07 13:05:22.803 2012-12-03 00:00:00.0002012-12-08 13:05:22.803 2012-12-03 00:00:00.0002012-12-09 13:05:22.803 2012-12-03 00:00:00.0002012-12-10 13:05:22.803 2012-12-10 00:00:00.0002012-12-11 13:05:22.803 2012-12-10 00:00:00.0002012-12-12 13:05:22.803 2012-12-10 00:00:00.000
select a.*, Monday = dateadd(wk, datediff(wk, 0, DATEADD(dd,-1,a.Date)), 0)from ( -- Test Data select [Date] = getdate()-2 union all select [Date] = getdate()-1 union all select [Date] = getdate() union all select [Date] = getdate()+1 union all select [Date] = getdate()+2 union all select [Date] = getdate()+3 union all select [Date] = getdate()+4 union all select [Date] = getdate()+5 union all select [Date] = getdate()+6 union all select [Date] = getdate()+7 union all select [Date] = getdate()+8 ) aorder by a.[Date]