Du kannst dies ausprobieren, um das Start- oder Enddatum der Woche zu erhalten. Gib einfach ein Datum an, für das du die Daten finden möchtest.
Die Logik ist ganz einfach: Hol dir das Start- und Enddatum der Woche und überprüfe dann, ob das Startdatum größer ist als das Monatsdatum. Wenn ja, nimm das Monatsdatum als Startdatum der Woche, sonst das Startdatum der Woche.
Spiel ein wenig herum, um das zu bekommen, was du willst Hier ist der Code:
DECLARE @date datetime
SET @date = '2013-01-30'
DECLARE @startdate datetime
DECLARE @enddate datetime
DECLARE @MonthStart datetime
Declare @MonthEnd datetime
SET @startdate = DATEADD(wk, DATEDIFF(wk, 6, @date), 6)
SET @enddate = DATEADD(dd,6, DATEADD(wk, DATEDIFF(wk, 6, @date), 6))
SET @monthStart = CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@date)-1),@date),101)
SET @MonthEnd =CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@date))),DATEADD(mm,1,@date)),101)
--select @startdate wstart,@MonthStart monthstart,@enddate wend,@MonthEnd monthend
select
[date] = @date
,[week] = DATEPART(wk,@date)
,[WeekStartDate] = Case
WHEN @startdate <= @MonthStart then @MonthStart else @startdate
END
,[WeekEndDate] = Case
WHEN @enddate > @MonthEnd then @MonthEnd else @enddate
END
schau hier:
Fiddle