Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp ngày tháng theo định dạng "01 August 2019" trong MySQL với STR_TO_DATE

Khi cột ngày tháng lưu dưới dạng chuỗi (VARCHAR) với định dạng như "01 August 2019", sắp xếp theo thứ tự thời gian thực sự không thể dùng ORDER BY trực tiếp vì MySQL sẽ sắp xếp theo thứ tự bảng chữ cái. Giải pháp là dùng hàm STR_TO_DATE() để chuyển chuỗi thành kiểu DATE trước khi sắp xếp.

Ví dụ minh họa

Tạo bảng lưu ngày tháng dạng chuỗi:

mysql> CREATE TABLE DemoTable1435 (
    DueDate VARCHAR(60)
);

Chèn dữ liệu:

mysql> INSERT INTO DemoTable1435 VALUES ('01 August 2019');
mysql> INSERT INTO DemoTable1435 VALUES ('01 Feb 2018');
mysql> INSERT INTO DemoTable1435 VALUES ('31 Jan 2017');
mysql> INSERT INTO DemoTable1435 VALUES ('01 March 2019');

Dữ liệu gốc (sắp xếp theo chữ cái):

mysql> SELECT * FROM DemoTable1435;
+----------------+
| DueDate        |
+----------------+
| 01 August 2019 |
| 01 Feb 2018    |
| 31 Jan 2017    |
| 01 March 2019  |
+----------------+

Sắp xếp đúng thứ tự thời gian

Sử dụng STR_TO_DATE() với định dạng '%d %M %Y':

mysql> SELECT * FROM DemoTable1435
    ORDER BY STR_TO_DATE(DueDate, '%d %M %Y');

Kết quả đã sắp xếp đúng:

+----------------+
| DueDate        |
+----------------+
| 31 Jan 2017    |
| 01 Feb 2018    |
| 01 March 2019  |
| 01 August 2019 |
+----------------+

Giải thích các định dạng

Ký hiệuÝ nghĩaVí dụ
%dNgày trong tháng (01-31)01, 31
%MTên tháng đầy đủJanuary, August
%bTên tháng viết tắt (3 chữ cái)Jan, Feb, Aug
%YNăm 4 chữ số2019, 2024

Lưu ý: Nên lưu ngày tháng ở kiểu DATE hoặc DATETIME thay vì VARCHAR để tránh vấn đề sắp xếp và so sánh.