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

Cách sắp xếp theo ngày trong T-SQL

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, subjectexam_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_monthexam_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 , ExamMonthExamDate ):

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;

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bản sửa lỗi R2 2008 làm hỏng RCSI

  2. Cách theo dõi những gì người dùng làm

  3. Làm thế nào để sắp xếp theo hai cột trong SQL?

  4. Mặt nạ dữ liệu trong các ứng dụng DB

  5. Kết nối với Teradata trong IRI Workbench