Oto 2 różne sposoby, oba zakładają, że tydzień zaczyna się w poniedziałek
Jeśli chcesz, aby tygodnie były całe, aby należały do miesiąca, w którym się zaczynają:Więc sobota 2012-09-01 i niedziela 2012-09-02 to tydzień 4, a poniedziałek 2012-09-03 to tydzień 1, użyj tego:
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
Jeśli Twoje tygodnie ograniczają zmianę miesiąca, więc sobota 2012-09-01 i niedziela 2012-09-02 to tydzień 1, a poniedziałek 2012-09-03 to tydzień 2, użyj tego:
declare @date datetime = '2012-09-01'
select datediff(week, dateadd(week,
datediff(day,0,dateadd(month,
datediff(month,0,@date),0))/7, 0),@date-1) + 1
Otrzymałem e-mail od Geralda. Zwrócił uwagę na wadę drugiej metody. Powinno to zostać teraz naprawione