Cần biết rằng có sự khác biệt về con số tuần chính xác, tùy thuộc vào nền văn hóa. Số tuần phụ thuộc vào một số giả định khác nhau giữa các quốc gia, hãy xem bài viết trên Wikipedia về vấn đề này. Có một tiêu chuẩn ISO (ISO 8601) áp dụng cho số tuần.
Máy chủ SQL được tích hợp DATEPART()
chức năng không nhất thiết phải làm Điều đúng. SQL Server giả định ngày 1 của tuần 1 sẽ là ngày 1 tháng 1, đối với nhiều ứng dụng đã sai.
Việc tính toán số tuần một cách chính xác là không hề nhỏ và bạn có thể tìm thấy các cách triển khai khác nhau trên web. Ví dụ:có một UDF tính toán số tuần ISO từ năm 1930-2030, là một trong số nhiều người khác. Bạn sẽ phải kiểm tra xem những gì phù hợp với bạn.
Câu hỏi này là từ Books Online (mặc dù bạn có thể muốn sử dụng câu trả lời từ câu trả lời của Jonas Lincoln, phiên bản BOL có vẻ không chính xác):
CREATE FUNCTION ISOweek (@DATE DATETIME)
RETURNS INT
AS
BEGIN
DECLARE @ISOweek INT
SET @ISOweek = DATEPART(wk,@DATE)
+1
-DATEPART(wk,CAST(DATEPART(yy,@DATE) AS CHAR(4))+'0104')
-- Special cases: Jan 1-3 may belong to the previous year
IF (@ISOweek=0)
SET @ISOweek = dbo.ISOweek(CAST(DATEPART(yy,@DATE) - 1
AS CHAR(4))+'12'+ CAST(24+DATEPART(DAY,@DATE) AS CHAR(2)))+1
-- Special case: Dec 29-31 may belong to the next year
IF ((DATEPART(mm,@DATE)=12) AND
((DATEPART(dd,@DATE)-DATEPART(dw,@DATE))>= 28))
SET @ISOweek=1
RETURN(@ISOweek)
END
GO