Nếu bạn cần trích xuất số tuần ISO từ một ngày trong SQL Server, bạn có thể sử dụng iso_week
khi gọi DATEPART()
hàm số. Ngoài ra, bạn có thể sử dụng isowk
hoặc isoww
đối số để làm điều tương tự.
Theo “Tuần lễ ISO”, tôi đang đề cập đến tiêu chuẩn ngày và giờ ISO 8601.
Các tuần lễ ISO bắt đầu vào các ngày thứ Hai và tuần đầu tiên của một năm bao gồm ngày 4 tháng Giêng của năm đó. Do đó, những ngày đầu tháng 1 có thể là một phần của tuần thứ 52 hoặc thứ 53 của năm trước và những ngày cuối tháng 12 là một phần của tuần đầu tiên của năm tiếp theo.
Điều này có nghĩa là khi bạn trích xuất số tuần từ một ngày, bạn có thể nhận được các kết quả khác nhau tùy thuộc vào việc bạn đang sử dụng lịch Gregory hay tiêu chuẩn ngày và giờ ISO 8601.
Ví dụ
DECLARE @date date = '2021-01-01';
SELECT DATEPART(iso_week, @date);
Kết quả:
53
Trong trường hợp này, ngày là ngày 1 tháng 1 năm 2021, nhưng theo điều kiện ISO, đó là tuần thứ 53 của năm 2020.
So sánh với Gregorian
Đây là một ví dụ khác để so sánh với tuần lễ Gregorian.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Kết quả:
+--------+------------+ | week | iso_week | |--------+------------| | 1 | 53 | +--------+------------+
Vì vậy, chúng ta có thể thấy rằng cùng một ngày có thể có số tuần khác nhau tùy thuộc vào việc chúng ta đang sử dụng lịch Gregory hay tiêu chuẩn ISO.
Chúng ta có thể làm điều tương tự với một ngày gần cuối năm trước.
DECLARE @date date = '2020-12-27';
SELECT
DATEPART(week, @date) AS week,
DATEPART(iso_week, @date) AS iso_week;
Kết quả:
+--------+------------+ | week | iso_week | |--------+------------| | 53 | 52 | +--------+------------+
Đối số thay thế
Như đã đề cập, có thể sử dụng isowk
một cách khác hoặc isoww
để trả về số tuần ISO.
DECLARE @date date = '2021-01-01';
SELECT
DATEPART(iso_week, @date) AS iso_week,
DATEPART(isowk, @date) AS isowk,
DATEPART(isoww, @date) AS isoww;
Kết quả:
+------------+---------+---------+ | iso_week | isowk | isoww | |------------+---------+---------| | 53 | 53 | 53 | +------------+---------+---------+