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

Cách đặt hàng theo ngày trong MySQL

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
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 MySQL, 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ứ ba và Health thứ tư, hoặc Health thứ ba và Science thứ tư).

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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');

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
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 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 STR_TO_DATE (). Nếu bạn có một ngày được lưu trữ dưới dạng chuỗi trong 'Year Month Day ', bạn có thể truyền nó thành một ngày bằng STR_TO_DATE(date_string, '%Y %M %d') . Nhưng trước tiên, bạn cần tạo một chuỗi bằng hàm CONCAT ():

CONCAT(exam_year, ' ', exam_month, ' ', exam_day)

CONCAT() hàm kết hợp tất cả các đối số thành một chuỗi. Bạn không cần truyền số thành chuỗi. Vì bạn muốn lấy một chuỗi trong 'Year Month Day định dạng ', các đối số là exam_year , exam_month , exam_day và khoảng cách giữa chúng.

Sau đó, bạn cần chuyển đổi chuỗi này thành một ngày sử dụng STR_TO_DATE(date_string, '%Y %M %d') hàm số. Đối số thứ hai của hàm này là định dạng ngày tháng. %Y là viết tắt của năm, %M là viết tắt của tháng (tên đầy đủ, không phải số) và %d là viết tắt của ngày.

STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')

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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') 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. Tôi có phải đề phòng việc tiêm SQL nếu tôi sử dụng trình đơn thả xuống không?

  2. Chọn các cột trên các cơ sở dữ liệu khác nhau

  3. Lỗi MySql:Trường 1364 'display_name' không có giá trị mặc định

  4. Làm cách nào để tôi có thể Chèn nhiều hàng vào một bảng MySQL và trả về các ID mới?

  5. Thông báo ClusterControl 1.4.1 - Phiên bản ProxySQL