Aqui estão 2 maneiras diferentes, ambas assumindo que a semana começa na segunda-feira
Se você quiser que as semanas sejam inteiras, elas pertençam ao mês em que começam:Então, sábado 2012-09-01 e domingo 2012-09-02 é a semana 4 e segunda-feira 2012-09-03 é a semana 1, use isto:
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
Se suas semanas forem cortadas na mudança de mês, então sábado 2012-09-01 e domingo 2012-09-02 é a semana 1 e segunda-feira 2012-09-03 é a semana 2, use isto:
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
Recebi um e-mail de Gerald. Ele apontou uma falha no segundo método. Isso deve ser corrigido agora