Вы можете попробовать это, чтобы получить начальную или конечную дату недели. Просто укажите дату, на которую вы найдете даты.
Логика довольно проста, просто введите начальную и конечную дату недели, а затем проверьте, больше ли дата начала, чем дата месяца, если в качестве даты начала недели укажите дату начала недели, кроме даты начала недели.
Скрипки немного, чтобы получить то, что вы хотите Вот код:
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
посмотреть здесь:
Fiddle
Thankx. Этот ответ помог мне. Его короткий код и после некоторой модификации в этом я создал процедуру, которая вводит неделю нет и выводит первый и последний день недели. – blue
+1 Вау, это приятное решение, здесь очень разумно используются 'DATEPART (WEEK, i) -DATEPART (WEEK, '2013-02-01')' и 'GROUP BY' с' MIN' и 'MAX'. –