เมื่อเก็บเวลาในรูปแบบข้อความ (VARCHAR) เช่น '7:30AM', '9:00PM' สามารถใช้ STR_TO_DATE() แปลงเป็นเวลาจริง แล้วจึงเรียงลำดับและดึงค่าล่าสุดได้
ตัวอย่างการใช้งาน
1. สร้างตารางเก็บเวลาเป็น VARCHAR
mysql> CREATE TABLE DemoTable (
DueTime VARCHAR(20)
);
Query OK, 0 rows affected (0.87 sec)
2. เพิ่มข้อมูลทดสอบ
mysql> INSERT INTO DemoTable VALUES('7:30AM');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('9:00PM');
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable VALUES('11:00PM');
Query OK, 1 row affected (0.13 sec)
3. ข้อมูลก่อนเรียงลำดับ
mysql> SELECT * FROM DemoTable; +---------+ | DueTime | +---------+ | 7:30AM | | 9:00PM | | 11:00PM | +---------+
4. คำสั่งหาเวลาล่าสุด (DESC + LIMIT 1)
mysql> SELECT * FROM DemoTable
-> ORDER BY STR_TO_DATE(DueTime, '%h:%i%p') DESC
-> LIMIT 1;
คำอธิบาย Format Specifier:
%h: ชั่วโมงแบบ 12 ชั่วโมง (01-12)%i: นาที (00-59)%p: AM/PM
5. ผลลัพธ์
+---------+ | DueTime | +---------+ | 11:00PM | +---------+
สรุป
ใช้ STR_TO_DATE() แปลงสตริงเวลาให้เป็นค่าเวลาจริง (TIME) ก่อน แล้วค่อยใช้ ORDER BY ... DESC LIMIT 1 เพื่อดึงค่าที่มากที่สุด (ล่าสุด) ได้อย่างถูกต้อง