Được rồi vì vậy tôi có một báo cáo thực hiện so sánh tuần này so với tuần trước và khách hàng của chúng tôi nhận thấy rằng dữ liệu của họ là "sôi nổi". Sau khi điều tra sâu hơn, chúng tôi thấy rằng nó đã không thực hiện đúng tuần theo tiêu chuẩn ISO. Tôi chạy kịch bản này như một trường hợp thử nghiệm.
SET DATEFIRST 1
SELECT DATEPART(WEEK, '3/26/13')
, DATEPART(WEEK, '3/27/12')
, DATEPART(WEEK, '3/20/12')
, DATEPART(WEEK, '1/2/12')
SELECT DATEPART(ISO_WEEK, '3/26/13')
, DATEPART(ISO_WEEK, '3/27/12')
, DATEPART(ISO_WEEK, '3/20/12')
, DATEPART(ISO_WEEK, '1/2/12')
Khi chạy tôi đã nhận được những kết quả này.
Tôi nghĩ rằng điều này thật đặc biệt và vì vậy tôi đã đào thêm một chút và thấy rằng SQL Server tính ngày 1 tháng 1 là tuần đầu tiên của năm, nơi ISO tính ngày Chủ nhật đầu tiên của tháng 1 là tuần đầu tiên của năm.
Câu hỏi sau đó kết thúc là hai lần. Câu hỏi 1 tại sao lại như vậy? Câu hỏi 2 có cách nào để thay đổi điều này để tôi không phải sửa đổi tất cả mã của mình để sử dụng ISO_Week
ở mọi nơi không?