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

Cách đặt hàng theo tên tháng trong MySQL

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 đặt bằng tên, không phải bằng số.p>

name birthday_month
Ronan Tisha KHÔNG ĐẦY ĐỦ
Tháng 12 2020
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 STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d');

Kết quả như sau:

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

Thảo luận:

Để đặt hàng theo tháng, hãy tạo ngày bằng tháng nà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') .

Đầu tiên, bạn cần tạo một chuỗi bằng hàm CONCAT (). Năm có thể là bất kỳ năm nào bạn muốn (ví dụ:0001 ) và ngày có thể là bất kỳ ngày nào bạn muốn (ví dụ:01 ):

CONCAT('0001 ', birthday_month, ' 01')

CONCAT() hàm kết hợp tất cả các đối số thành một chuỗi. Chuỗi phải ở dạng 'Year Month Day định dạng ', vì vậy đối số thứ hai phải là birthday_month; đối số đầu tiên và đối số thứ ba chỉ cần ở đúng định dạ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 của 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('0001 ', birthday_month, ' 01'), '%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 birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d') 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 birthday_month được hiển thị theo thứ tự ngẫu nhiên (bạn có thể thấy Angie Julia thứ ba và Narelle Dillan thứ tư, hoặc Narelle Dillan thứ ba và Angie Julia thứ tư).


  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ệp PHP không thể nhập một số phần mã

  2. Giới thiệu về các lệnh SQL

  3. Cách tạo khóa chính tổng hợp đúng cách - MYSQL

  4. hiển thị dữ liệu từ cơ sở dữ liệu SQL thành bảng php / html

  5. Làm thế nào để đồng bộ lại Mysql DB nếu Master và slave có cơ sở dữ liệu khác nhau trong trường hợp sao chép Mysql?