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

Cách sắp xếp theo ngày trong PostgreSQL hoặc Oracle

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ủ đề 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
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
Nghệ thuật KHÔNG ĐẦY ĐỦ

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 PostgreSQL và Oracle, NULL s được hiển thị cuối cùng khi sắp xếp theo thứ tự tăng dần và đầu tiên 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 Sức khỏe thứ hai và Science thứ ba).

Ví dụ 2:

exam bảng có các cột sau:subject , exam_year , exam_monthexam_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
  exam_year,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')),
  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_monthexam_date ):

chủ đề exam_year exam_month exam_day
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
Nghệ thuật KHÔNG ĐẦY ĐỦ KHÔNG ĐẦY ĐỦ KHÔNG ĐẦY ĐỦ

Thảo luận:

Bạn cần sắp xếp các hàng theo ba giá trị:năm, tháng và ngày, nhưng để có thứ tự chính xác, bạn cần chuyển đổi tháng thành một số ('January 'đến 1 , 'February 'đến 2 , vân vân.). Nếu không, bạn sẽ thấy 'December 'trước' January '. Hàm TO_DATE (exam_month, 'Month') chuyển đổi tên tháng đầy đủ thành một ngày trong '0001-MM-01 ' định dạng. Ví dụ:bạn nhận được '0001-12-01 'cho tháng 12.

Bây giờ bạn có thể sử dụng hàm EXTRACT (THÁNG TỪ ngày) để trích xuất tháng từ giá trị ngày này. Tháng sẽ được trả về dưới dạng một số.

Kết hợp hai hàm này, bạn có thể nhận được tháng dưới dạng số bằng công thức sau:

EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))

Để sắp xếp các hàng theo ngày, bạn cần sắp xếp theo năm, tháng và ngày (theo thứ tự này). Nếu bạn muốn xem bài kiểm tra mới nhất trước tiên, bạn cần sắp xếp theo thứ tự giảm dần. Để thực hiện việc này, bạn cần sử dụng DESC từ khóa sau mỗi cột trong ORDER BY mệnh đề.

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC,
  exam_day 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. Làm cách nào để lấy thông tin về chủ sở hữu chỉ mục và bảng trong Oracle?

  2. Xác định xem Dữ liệu Trường trong Oracle có thuộc kiểu Số hay không

  3. Sử dụng PL / SQL làm cách nào để tôi đưa nội dung của tệp vào một đốm màu?

  4. ORA-16205 Nâng cấp lên 11.2.0.3

  5. Lấy tên của thủ tục hoặc hàm gọi trong Oracle PL / SQL