Đây là 2 cách khác nhau, cả hai đều giả sử tuần bắt đầu vào thứ hai
Nếu bạn muốn các tuần là toàn bộ, thì chúng thuộc về tháng mà chúng bắt đầu:Vì vậy, thứ bảy 2012-09-01 và chủ nhật 2012-09-02 là tuần 4 và thứ hai 2012-09-03 là tuần 1 hãy sử dụng cái này:
declare @date datetime = '2012-09-01'
select datepart(day, datediff(day, 0, @date)/7 * 7)/7 + 1
Nếu số tuần của bạn bị cắt giảm vào ngày thay đổi tháng, vì vậy thứ bảy 2012-09-01 và chủ nhật 2012-09-02 là tuần 1 và thứ hai 2012-09-03 là tuần thứ 2, hãy sử dụng cái này:
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
Tôi đã nhận được một email từ Gerald. Ông đã chỉ ra một lỗ hổng trong phương pháp thứ hai. Điều này sẽ được khắc phục ngay bây giờ