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ủ đề | Ngày thi |
---|---|
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 ExamDate;
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 ExamDate
):
Chủ đề | Ngày thi |
---|---|
Nghệ thuật | KHÔNG ĐẦY ĐỦ |
Khoa học | 2020-01-05 |
Sức khỏe | 2020-01-05 |
Tiếng Anh | 2020-01-08 |
Toán học | ngày 12 tháng 12 năm 2019 |
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 ExamDate 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 ExamDate DESC;
Lưu ý rằng trong T-SQL, 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 ExamDate
được hiển thị theo thứ tự không xác định (bạn có thể xem 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
. Tháng được đặt theo tên, không phải theo số.
Chủ đề | ExamYear | ExamMonth | ExamDay |
---|---|---|---|
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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS 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 ExamYear
, ExamMonth
và ExamDate
):
Chủ đề | ExamYear | ExamMonth | ExamDay |
---|---|---|---|
Nghệ thuật | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ | KHÔNG ĐẦY ĐỦ |
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 |
Toán học | 2019 | Tháng 12 | 19 |
Thảo luận:
Để nhóm 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 CAST (). Nếu bạn có một ngày được lưu trữ dưới dạng chuỗi trong 'YYYY-Month-DD
', bạn có thể truyền nó thành một ngày bằng cách sử dụng CAST(date_string AS date)
. Đầu tiên, bạn cần tạo một chuỗi, cũng bằng cách sử dụng hàm CAST ():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
Biểu thức CAST(ExamYear AS VARCHAR(4))
tạo một chuỗi từ số được lưu trữ trong ExamYear
. Biểu thức CAST(ExamDay AS VARCHAR(2))
tạo một chuỗi từ số được lưu trữ trong ExamDay
. ExamMonth
đã là một chuỗi, vì vậy không cần truyền nó.
Sau đó, bạn cần truyền chuỗi này thành một ngày bằng cách sử dụng CAST(date_string AS date)
chức năng:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
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 CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;