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

Cách đặt hàng theo tên tháng trong PostgreSQL hoặc Oracle

Vấn đề:

Bạn muốn sắp xếp các hàng theo số tháng, tên tháng nhất định (bạn muốn tháng 1 được hiển thị trước, tháng 12 cuối cùng).

Ví dụ:

birthday bảng chứa hai cột:tên và birthday_month . Các tháng được viết bằng tên, không phải bằng số.

name birthday_month
Ronan Tisha KHÔNG ĐẦY ĐỦ
Tháng 12 tháng 1
Angie Julia tháng 4
Narelle Dillan tháng 4
Purdie Casey tháng 1
Donna Nell KHÔNG ĐẦY ĐỦ
Blaze Graeme Tháng 10

Bạn muốn sắp xếp các hàng theo birthday_month .

Giải pháp:

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));

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 birthday_month ):

name birthday_month
Purdie Casey tháng 1
Angie Julia tháng 4
Narelle Dillan tháng 4
Blaze Graeme Tháng 10
Ronan Tisha tháng 1
Tháng 12 KHÔNG ĐẦY ĐỦ
Donna Nell KHÔNG ĐẦY ĐỦ

Thảo luận:

Để sắp xếp các hàng theo tháng bắt đầu từ tháng 1 và kết thúc bằng tháng 12, 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 (birthday_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ẽ là một số giữa 112 .

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(birthday_month, 'Month'))

Đặt biểu thức này sau ORDER BY để sắp xếp các hàng theo tháng. Nếu bạn muốn xem tháng 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, như thế này:

SELECT *
FROM birthday
ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) 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 birthday_month được hiển thị theo thứ tự ngẫu nhiên (bạn có thể thấy Angie Julia thứ hai và Narelle Dillan thứ ba, hoặc Narelle Dillan thứ hai và Angie Julia thứ ba).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa Chế độ xem và Chế độ xem vật chất hóa trong Oracle là gì?

  2. 24 câu hỏi phỏng vấn người quản lý đồng thời tuyệt vời

  3. Một tài liệu tham khảo tốt cho Oracle PL / SQL

  4. Làm cách nào để trích xuất tệp từ trường Oracle BLOB?

  5. Sao chép một hàng trong cùng một bảng mà không cần phải nhập hơn 50 tên cột (trong khi thay đổi 2 cột)