Làm báo cáo thường sử dụng chuẩn 1 năm có 52 tuần và được tính theo chuẩn ISO vậy khi số tuần tính theo ISO mà được 52 hay 53 thì mình cần kiểm tra lại nếu rơi vào tháng 12 thì sẽ là tuần thứ 52 còn rơi vào tháng 1 thì ta sẽ chuyển về tuần 1.
Trong SQL có hàm cung cấp lấy tuần của ngày ra theo 2 chuẩn này:
VD: kiểm tra ngày 01/07/2022 theo định dạng MM/dd/YYYY
Theo ISO 8601:
select DATEPART(ISOWK,'2022-07-01') as WeekNumberISO
select DATEPART(ISOWK,'2021-01-01') as WeekNumberISO
select DATEPART(ISOWK,'2022-01-01') as WeekNumberISO
select DATEPART(ISOWK,'2020-12-31') as WeekNumberISO
DECLARE @Date date ='2022-01-01'
select case
when DATEPART(ISOWK,@Date)>51 and MONTH(@Date)=1 then 1
when DATEPART(ISOWK,@Date)>51 and MONTH(@Date)=12 then 52
else DATEPART(ISOWK,@Date)
end as WeekNumberISO