Vấn đề:
Bạn muốn sắp xếp các hàng theo ngày.
Ví dụ 1:
exam
bảng có hai cột, subject
và exam_date
.
chủ đề | exam_date |
---|---|
Toán học | ngày 12 tháng 12 năm 2019 |
Tiếng Anh | 2020-01-08 |
Khoa học | 2020-01-05 |
Sức khỏe | 2020-01-05 |
Nghệ thuật | KHÔNG ĐẦY ĐỦ |
Bạn muốn sắp xếp các hàng theo exam_date
.
Giải pháp:
SELECT * FROM exam ORDER BY exam_date;
Kết quả trông như thế này (các hàng được sắp xếp theo thứ tự tăng dần theo exam_date
):
chủ đề | exam_date |
---|---|
Nghệ thuật | KHÔNG ĐẦY ĐỦ |
Toán học | ngày 12 tháng 12 năm 2019 |
Khoa học | 2020-01-05 |
Sức khỏe | 2020-01-05 |
Tiếng Anh | 2020-01-08 |
Thảo luận:
Sử dụng ORDER BY
từ khóa và tên của cột mà bạn muốn sắp xếp. Bằng cách này, bạn sẽ sắp xếp dữ liệu theo thứ tự tăng dần của cột này. Bạn cũng có thể sử dụng ASC
từ khóa để làm rõ rằng thứ tự tăng dần (ngày sớm nhất được hiển thị trước, ngày mới nhất được hiển thị sau cùng, v.v.).
SELECT * FROM exam ORDER BY exam_date ASC;
Nếu bạn muốn xem ngày mới nhất trước và ngày sớm nhất sau cùng, bạn cần sắp xếp theo thứ tự giảm dần. Sử dụng DESC
từ khóa trong trường hợp này.
SELECT * FROM exam ORDER BY exam_date DESC;
Lưu ý rằng trong MySQL, NULL
s được hiển thị đầu tiên khi sắp xếp theo thứ tự tăng dần và cuối cùng khi sắp xếp theo thứ tự giảm dần. Ngoài ra, các hàng có cùng exam_date
được hiển thị theo thứ tự ngẫu nhiên (bạn có thể thấy Science
thứ ba và Health
thứ tư, hoặc Health
thứ ba và Science
thứ tư).
Ví dụ 2:
exam
bảng có các cột sau:subject
, exam_year
, exam_month
và exam_day
. Các tháng được viết bằng tên, không phải bằng số.
chủ đề | exam_year | exam_month | exam_day |
---|---|---|---|
Toán học | 2019 | Tháng 12 | 19 |
Tiếng Anh | 2020 | tháng 1 | 8 |
Khoa học | 2020 | tháng 1 | 5 |
Sức khỏe | 2020 | tháng 1 | 5 |
Nghệ thuật | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ |
Bạn muốn sắp xếp các hàng theo ngày thi.
Giải pháp:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
Kết quả trông như thế này (các hàng được sắp xếp theo thứ tự tăng dần theo exam_year
, exam_month
và exam_date
):
chủ đề | exam_year | exam_month | exam_day |
---|---|---|---|
Nghệ thuật | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ |
Toán học | 2019 | Tháng 12 | 19 |
Sức khỏe | 2020 | tháng 1 | 5 |
Khoa học | 2020 | tháng 1 | 5 |
Tiếng Anh | 2020 | tháng 1 | 8 |
Thảo luận:
Để sắp xếp theo ngày, hãy tạo các giá trị ngày từ giá trị năm, tháng và ngày. Để thực hiện việc này, hãy sử dụng hàm STR_TO_DATE (). Nếu bạn có một ngày được lưu trữ dưới dạng chuỗi trong 'Year Month Day
', bạn có thể truyền nó thành một ngày bằng STR_TO_DATE(date_string, '%Y %M %d')
. Nhưng trước tiên, bạn cần tạo một chuỗi bằng hàm CONCAT ():
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
CONCAT()
hàm kết hợp tất cả các đối số thành một chuỗi. Bạn không cần truyền số thành chuỗi. Vì bạn muốn lấy một chuỗi trong 'Year Month Day
định dạng ', các đối số là exam_year
, exam_month
, exam_day
và khoảng cách giữa chúng.
Sau đó, bạn cần chuyển đổi chuỗi này thành một ngày sử dụng STR_TO_DATE(date_string, '%Y %M %d')
hàm số. Đối số thứ hai của hàm này là định dạng ngày tháng. %Y
là viết tắt của năm, %M
là viết tắt của tháng (tên đầy đủ, không phải số) và %d
là viết tắt của ngày.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
Sử dụng nó với ORDER BY
mệnh đề để sắp xếp các hàng theo thứ tự tăng dần theo ngày. Nếu bạn muốn xem các hàng theo thứ tự giảm dần, chỉ cần thêm DESC
từ khóa, như thế này:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;