Trong MariaDB, WEEK()
là một hàm ngày và giờ được tích hợp sẵn trả về tuần từ một biểu thức ngày nhất định.
Nó chấp nhận hai đối số; ngày bạn muốn trích xuất trong 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.
Cú pháp
Cú pháp như sau:
WEEK(date[,mode])
Nơi date
là biểu thức ngày để lấy tuần 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 WEEK()
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 WEEK()
mà không chỉ định chế độ:
SELECT WEEK('2030-01-01');
Kết quả:
+ -------------------- + | TUẦN ('2030-01-01') | + -------------------- + | 0 | + -------------------- +
Chỉ định một chế độ
Dưới đây là một ví dụ về việc chỉ định chế độ:
SELECT WEEK('2030-01-01', 1);
Kết quả:
+ ----------------------- + | TUẦN ('2030-01-01', 1) | + ----------------------- + | 1 | + ----------------------- +
Lần này, kết quả là 1
thay vì 0
.
Hãy chạy qua tất cả các chế độ trong cùng một ngày:
SELECT
WEEK('2030-01-01', 0),
WEEK('2030-01-01', 1),
WEEK('2030-01-01', 2),
WEEK('2030-01-01', 3),
WEEK('2030-01-01', 4),
WEEK('2030-01-01', 5),
WEEK('2030-01-01', 6),
WEEK('2030-01-01', 7);
Kết quả (sử dụng đầu ra dọc):
TUẦN ('2030-01-01', 0):0 TUẦN ('2030-01-01', 1):1 TUẦN ('2030-01-01', 2):52 TUẦN ('2030-01-01 ', 3):1 TUẦN (' 2030-01-01 ', 4):1 TUẦN (' 2030-01-01 ', 5):0 TUẦN (' 2030-01-01 ', 6):1 TUẦN (' 2030-01 -01 ', 7):53
Giá trị ngày giờ
WEEK()
hàm cũng hoạt động với các giá trị ngày giờ:
SELECT WEEK('2030-08-01 10:30:45');
Kết quả:
+ ----------------------------- + | TUẦN ('2030-08-01 10:30:45') | + ----------------------------- + | 30 | + ----------------------------- +
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 WEEK(20301125);
Kết quả:
+ ---------------- + | TUẦN (20301125) | + ---------------- + | 47 | + ---------------- +
Hoặc thậm chí như sau (sử dụng năm có hai chữ số):
SELECT WEEK(301125);
Kết quả:
+ -------------- + | TUẦN (301125) | + -------------- + | 47 | + -------------- +
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 WEEK(20301135);
Kết quả:
+ ---------------- + | TUẦN (20301135) | + ---------------- + | NULL | + ---------------- + 1 hàng được đặt, 1 cảnh báo (0,001 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
WEEK('2030/06/25'),
WEEK('2030,06,25'),
WEEK('2030:06:25'),
WEEK('2030;06!25');
Kết quả (sử dụng đầu ra dọc):
TUẦN ('2030/06/25'):25 TUẦN ('2030,06,25'):25 TUẦN ('2030:06:25'):25 TUẦN ('2030; 06! 25'):25Ngà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(), WEEK(NOW());
Kết quả:
+ --------------------- + ------------- + | NGAY BÂY GIỜ () | TUẦN (NGAY ()) | + --------------------- + ------------- + | 2021-05-17 08:36:12 | 20 | + --------------------- + ------------- +Đối số không hợp lệ
Khi truyền một đối số không hợp lệ,
WEEK()
trả vềnull
:SELECT WEEK('2030-65-78');
Kết quả:
+ -------------------- + | 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
WEEK()
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 WEEK();
Kết quả:
ERROR 1064 (42000):Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MariaDB của bạn để biết cú pháp phù hợp để sử dụng gần ')' tại dòng 1Và một ví dụ khác:
SELECT WEEK('2030-12-10', 1, 2);
Kết quả:
ERROR 1064 (42000):Bạn có lỗi trong cú pháp SQL của mình; kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MariaDB của bạn để biết cú pháp phù hợp để sử dụng gần '2)' tại dòng 1