การจัดเรียงเวลาในรูปแบบ 12 ชั่วโมง (AM/PM) ใน MySQL
ใช้ STR_TO_DATE() แปลงสตริงเวลา AM/PM เป็นค่า TIME จริง ก่อนจัดเรียงด้วย ORDER BY
SELECT yourColumn FROM yourTable ORDER BY STR_TO_DATE(yourColumn, '%l:%i %p');
ตัวอย่างการใช้งาน
สร้างตารางเก็บเวลาออก (String):
mysql> create table DemoTable (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, UserLogoutTime varchar(200));
mysql> insert into DemoTable(UserLogoutTime) values('09:45 PM');
mysql> insert into DemoTable(UserLogoutTime) values('11:56 AM');
mysql> insert into DemoTable(UserLogoutTime) values('01:01 AM');
mysql> insert into DemoTable(UserLogoutTime) values('02:01 PM');
mysql> insert into DemoTable(UserLogoutTime) values('04:10 PM');
ข้อมูลต้นฉบับ (เรียงตาม String ไม่ถูกต้อง):
+----+----------------+ | Id | UserLogoutTime | +----+----------------+ | 1 | 09:45 PM | | 2 | 11:56 AM | | 3 | 01:01 AM | | 4 | 02:01 PM | | 5 | 04:10 PM | +----+----------------+
คิวรีจัดเรียงตามเวลาจริง:
mysql> select UserLogoutTime from DemoTable ORDER BY STR_TO_DATE(UserLogoutTime, '%l:%i %p');
+----------------+ | UserLogoutTime | +----------------+ | 01:01 AM | | 11:56 AM | | 02:01 PM | | 04:10 PM | | 09:45 PM | +----------------+
Format Specifiers สำหรับ 12-hour:
%l- ชั่วโมง 1-12 (ไม่ padding 0)%h- ชั่วโมง 01-12 (padding 0)%i- นาที 00-59%p- AM/PM
แนะนำ: เก็บเวลาในคอลัมน์ TIME หรือ DATETIME แทน String จะ Query/Sort ได้โดยตรง ไม่ต้องแปลงทุกครั้ง