Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Trả lại số tuần ISO từ một ngày trong SQL Server (T-SQL)

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      |
 +------------+---------+---------+ 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để truy vấn một giá trị trong cột SQL Server XML

  2. SQL Server 2016:sys.dm_exec_osystem_stats

  3. Cách tốt nhất để viết hoa chữ cái đầu tiên của mỗi từ trong một chuỗi trong SQL Server là gì

  4. Cách tạo tập lệnh để tạo lại các ràng buộc khóa ngoại trong cơ sở dữ liệu SQL Server - Hướng dẫn sử dụng SQL Server / TSQL Phần 73

  5. Có cách nào để không sử dụng dấu ngoặc vuông trong SQL Server không?