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ủ đề | Ngày thi |
---|---|
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 SQLite, 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ứ hai và Health
thứ ba, hoặc Health
thứ hai và Science
thứ ba).
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 ĐỦ |
Giải pháp:
SELECT * FROM exam ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day;
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_day
):
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 các hàng theo ngày thi, trước tiên bạn cần sắp xếp theo năm, sau đó theo tháng số (không phải tên tháng) và cuối cùng là theo ngày. Bạn có thể chuyển đổi tên tháng thành tháng số bằng CASE WHEN
mệnh đề. Sau CASE
từ khóa, chỉ định tên của cột. Sau đó, sau mỗi WHEN, hãy nêu giá trị trong cột này, sử dụng từ khóa THEN và chỉ định giá trị mới bạn muốn chỉ định thay vì giá trị cũ. Ở đây, cột là exam_month
, các giá trị hiện tại trong cột này là 'January
',' February
',…,' December
', và các giá trị mới là số tháng 1
, 2
,…, 12
. Sau khi bạn hoàn tất việc chuyển đổi tất cả các giá trị, hãy nhớ sử dụng END
từ khóa để đóng CASE WHEN
mệnh đề. Hãy xem:
CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
Đây là cách bạn chuyển đổi tên tháng thành số tháng. Bạn có thể sử dụng nó khi sắp xếp các hàng theo ngày, nghĩa là theo năm, tháng số và ngày.
ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day
Bằng cách này, bạn có thể sắp xếp các hàng theo thứ tự tăng dần theo ngày. NULL
s sẽ được hiển thị đầu tiên. Để thay đổi thứ tự giảm dần, hãy sử dụng DESC
từ khóa sau mỗi cột trong ORDER BY
mệnh đề. Đây là toàn bộ truy vấn sẽ trông như thế nào:
SELECT * FROM exam ORDER BY exam_year DESC, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC, exam_day DESC;
Lưu ý rằng khi sắp xếp theo thứ tự giảm dần trong SQLite, NULL
s được hiển thị sau cùng.