Ecco 2 modi diversi, entrambi presuppongono che la settimana inizi di lunedì
Se vuoi che le settimane siano intere, quindi appartengono al mese in cui iniziano:Quindi sabato 01-09-2012 e domenica 02-09-2012 è la settimana 4 e lunedì 03-09-2012 è la settimana 1 usa questo:
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
Se le tue settimane tagliano il mese, cambia così sabato 01-09-2012 e domenica 02-09-2012 è la settimana 1 e lunedì 03-09-2012 è la settimana 2 usa questo:
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
Ho ricevuto un'e-mail da Gerald. Ha evidenziato un difetto nel secondo metodo. Questo dovrebbe essere risolto ora