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

Cách YEARWEEK () hoạt động trong MariaDB

Trong MariaDB, YEARWEEK() là một hàm ngày và giờ được tích hợp sẵn trả về năm và tuần cho một ngày nhất định.

Nó chấp nhận hai đối số; ngày bạn muốn trích xuất năm và tuần và đối số chế độ tùy chọn để chỉ định chế độ sẽ sử dụng trong kết quả.

Nó trả về tuần dưới dạng một số trong phạm vi 0 thành 53 hoặc 1 thành 53 , tùy thuộc vào chế độ đang được sử dụng. Ngoài ra, năm trong kết quả có thể khác với năm trong đối số ngày cho tuần đầu tiên và tuần cuối cùng của năm.

Cú pháp

Cú pháp như sau:

 YEARWEEK(date), YEARWEEK(date,mode) 

Điều này cũng có thể được diễn đạt như thế này:

 YEARWEEK(date[,mode]) 

Nơi date là biểu thức ngày tháng để lấy năm và tuần từ đó và mode là một đối số tùy chọn cho phép bạn chỉ định một chế độ để sử dụng.

Chế độ

Chế độ mode tùy chọn đối số xác định liệu tuần bắt đầu vào Chủ Nhật hay Thứ Hai và liệu giá trị trả về có nằm trong phạm vi từ 0 hay không thành 53 hoặc từ 1 thành 53 .

Đối số mode có thể là bất kỳ đối số nào sau đây:

Chế độ ngày đầu tiên trong tuần Phạm vi Tuần 1 là tuần đầu tiên với…
0 Chủ nhật 0-53 một ngày Chủ nhật trong năm này
1 Thứ Hai 0-53 hơn 3 ngày trong năm nay
2 Chủ nhật 1-53 một ngày Chủ nhật trong năm này
3 Thứ Hai 1-53 hơn 3 ngày trong năm nay
(phù hợp với ISO 8601:1988)
4 Chủ nhật 0-53 hơn 3 ngày trong năm nay
5 Thứ Hai 0-53 một ngày thứ Hai trong năm nay
6 Chủ nhật 1-53 hơn 3 ngày trong năm nay
7 Thứ Hai 1-53 một ngày thứ Hai trong năm nay

Nếu đối số chế độ bị bỏ qua, giá trị của default_week_format biến hệ thống được sử dụng.

Hãy kiểm tra giá trị của default_week_format của tôi biến hệ thống:

 SELECT @@default_week_format; 

Kết quả:

 + ----------------------- + | @@ default_week_format | + ----------------------- + | 0 | + ----------------------- + 

Bây giờ, khi tôi chạy YEARWEEK() mà không chỉ định một chế độ, nó sẽ sử dụng chế độ 0 .

Ví dụ

Đây là ví dụ về cách gọi YEARWEEK() mà không chỉ định chế độ:

 SELECT YEARWEEK('2030-01-01'); 

Kết quả:

 + ------------------------ + | NĂM TUẦN ('2030-01-01') | + ------------------------ + | 202952 | + ------------------------ + 

Trong trường hợp này, năm và tuần kết quả là của năm trước.

Chỉ định một chế độ

Dưới đây là một ví dụ về việc chỉ định chế độ:

 SELECT YEARWEEK('2030-01-01', 1); 

Kết quả:

 + --------------------------- + | NĂM TUẦN ('2030-01-01', 1) | + --------------------------- + | 203001 | + --------------------------- + 

Lần này, kết quả khác hẳn.

Hãy chạy qua tất cả các chế độ trong cùng một ngày:

 SELECT 
    YEARWEEK('2030-01-01', 0),
    YEARWEEK('2030-01-01', 1),
    YEARWEEK('2030-01-01', 2),
    YEARWEEK('2030-01-01', 3),
    YEARWEEK('2030-01-01', 4),
    YEARWEEK('2030-01-01', 5),
    YEARWEEK('2030-01-01', 6),
    YEARWEEK('2030-01-01', 7); 

Kết quả (sử dụng đầu ra dọc):

 YEARWEEK ('2030-01-01', 0):202952YEARWEEK ('2030-01-01', 1):203001YEARWEEK ('2030-01-01', 2):202952YEARWEEK ('2030-01-01 ', 3):203001YEARWEEK (' 2030-01-01 ', 4):203001YEARWEEK (' 2030-01-01 ', 5):202953YEARWEEK (' 2030-01-01 ', 6):203001YEARWEEK (' 2030-01 -01 ', 7):202953 

Giá trị ngày giờ

YEARWEEK() hàm cũng hoạt động với các giá trị ngày giờ:

 SELECT YEARWEEK('2030-08-01 10:30:45'); 

Kết quả:

 + --------------------------------- + | NĂM TUẦN ('2030-08-01 10:30:45') | + --------------------------------- + | 203030 | + --------------------------------- + 

Số ngày

Cũng có thể chuyển ngày tháng dưới dạng số, miễn là ngày tháng có ý nghĩa.

Ví dụ

 SELECT YEARWEEK(20301125); 

Kết quả:

 + -------------------- + | NĂM TUẦN (20301125) | + -------------------- + | 203047 | + -------------------- + 

Hoặc thậm chí như sau (sử dụng năm có hai chữ số):

 SELECT YEARWEEK(301125); 

Kết quả:

 + ------------------ + | NĂM TUẦN (301125) | + ------------------ + | 203047 | + ------------------ + 

Nhưng nó phải có ý nghĩa như một cuộc hẹn hò. Đây là những gì sẽ xảy ra nếu tôi tăng thời gian trong ngày thành một ngày không hợp lệ:

 SELECT YEARWEEK(20301135); 

Kết quả:

 + -------------------- + | NĂM TUẦN (20301135) | + -------------------- + | NULL | + -------------------- + 1 hàng được đặt, 1 cảnh báo (0,000 giây) 

Nó trả về null với một cảnh báo.

Hãy xem cảnh báo:

 SHOW WARNINGS; 

Kết quả:

 + --------- + ------ + ----------------------------- --------- + | Mức độ | Mã | Tin nhắn | + --------- + ------ + ------------------------------ -------- + | Cảnh báo | 1292 | Giá trị ngày giờ không chính xác:'20301135' | + --------- + ------ + ------------------------ -------------- + 

Các dấu phân cách khác

Bạn có thể sử dụng các dấu phân cách khác cho ngày. MariaDB khá dễ dãi khi nói đến dấu phân cách ngày tháng. Dưới đây là một số ví dụ hợp lệ:

 SELECT 
    YEARWEEK('2030/06/25'),
    YEARWEEK('2030,06,25'),
    YEARWEEK('2030:06:25'),
    YEARWEEK('2030;06!25'); 

Kết quả (sử dụng đầu ra dọc):

 YEARWEEK ('2030/06/25'):203025YEARWEEK ('2030,06,25'):203025YEARWEEK ('2030:06:25'):203025YEARWEEK ('2030; 06! 25'):203025  

Ngày hiện tại

Chúng ta có thể chuyển NOW() làm đối số datetime để sử dụng ngày hiện tại:

 SELECT 
    NOW(),
    YEARWEEK(NOW()); 

Kết quả:

 + --------------------- + ----------------- + | NGAY BÂY GIỜ () | NĂM TUẦN (NGAY ()) | + --------------------- + ----------------- + | 2021-05-17 09:08:23 | 202120 | + --------------------- + ----------------- + 

Đối số không hợp lệ

Khi được truyền một đối số không hợp lệ, YEARWEEK() trả về null :

 SELECT YEARWEEK('2030-65-78'); 

Kết quả:

 + ------------------------ + | NĂM TUẦN ('2030-65-78') | + ------------------------ + | NULL | + ------------------------ + 1 hàng được đặt, 1 cảnh báo (0,000 giây) 

Hãy đưa ra cảnh báo:

 SHOW WARNINGS; 

Kết quả:

 + --------- + ------ + ----------------------------- ----------- + | Mức độ | Mã | Tin nhắn | + --------- + ------ + ------------------------------ ---------- + | Cảnh báo | 1292 | Giá trị ngày giờ không chính xác:'2030-65-78' | + --------- + ------ + -------------------- -------------------- + 

Thiếu đối số

Gọi YEARWEEK() với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào, dẫn đến lỗi:

 SELECT YEARWEEK(); 

Kết quả:

 ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'YEARWEEK' 

Và một ví dụ khác:

 SELECT YEARWEEK('2030-12-10', 1, 2); 

Kết quả:

 ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'YEARWEEK' 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khắc phục “ERROR 1054 (42S22):Cột không xác định‘… ’trong‘ on mệnh đề ”trong MariaDB

  2. Kiểm soát chuyển đổi dự phòng sao chép cho MySQL và MariaDB với các tập lệnh chuyển đổi dự phòng trước hoặc sau dự phòng

  3. Mẹo và thủ thuật để triển khai điều khiển truy cập dựa trên vai trò cơ sở dữ liệu cho MariaDB

  4. Chuyển sang MariaDB Backup

  5. Cách FROM_BASE64 () hoạt động trong MariaDB