Voici 2 façons différentes, les deux supposent que la semaine commence le lundi
Si vous voulez que les semaines soient entières, elles appartiennent donc au mois au cours duquel elles commencent :Donc, samedi 01/09/2012 et dimanche 02/09/2012 est la semaine 4 et lundi 03/09/2012 est la semaine 1, utilisez ceci :
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
Si vos semaines ont été coupées au cours du mois, alors samedi 01/09/2012 et dimanche 02/09/2012 est la semaine 1 et lundi 03/09/2012 est la semaine 2, utilisez ceci :
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
J'ai reçu un e-mail de Gérald. Il a souligné une faille dans la seconde méthode. Cela devrait être corrigé maintenant