ใช้ ORDER BY STR_TO_DATE(timestamp_column, 'format') แปลงสตริง timestamp เป็นวันที่จริงก่อนเรียง
สร้างตารางตัวอย่าง
mysql> CREATE TABLE DemoTable (
-> `timestamp` VARCHAR(100)
-> );
เพิ่มข้อมูลตัวอย่าง (รูปแบบ MM/DD/YYYY HH:MM:SS AM/PM)
mysql> INSERT INTO DemoTable VALUES('06/22/2019 01:10:20 PM');
mysql> INSERT INTO DemoTable VALUES('06/22/2019 12:00:27 PM');
mysql> INSERT INTO DemoTable VALUES('06/22/2019 06:56:20 AM');
mysql> INSERT INTO DemoTable VALUES('06/22/2019 07:10:11 AM');
แสดงข้อมูล
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+------------------------+ | timestamp | +------------------------+ | 06/22/2019 01:10:20 PM | | 06/22/2019 12:00:27 PM | | 06/22/2019 06:56:20 AM | | 06/22/2019 07:10:11 AM | +------------------------+
คำสั่งเรียงตามเวลาจริง
mysql> SELECT * FROM DemoTable ORDER BY STR_TO_DATE(`timestamp`, '%m/%d/%Y %h:%i:%s %p');
ผลลัพธ์ (เรียงจากเช้ามาเย็น):
+------------------------+ | timestamp | +------------------------+ | 06/22/2019 06:56:20 AM | | 06/22/2019 07:10:11 AM | | 06/22/2019 12:00:27 PM | | 06/22/2019 01:10:20 PM | +------------------------+
คำอธิบาย: รูปแบบ %m/%d/%Y %h:%i:%s %p ตรงกับ MM/DD/YYYY HH:MM:SS AM/PM | STR_TO_DATE แปลงเป็น DATETIME แล้ว ORDER BY เรียงได้ถูกต้อง