บทความนี้สาธิตการเรียงลำดับคอลัมน์ที่เก็บวันที่เป็น VARCHAR (เช่น 'March 2019') โดยแปลงเป็น DATE จริงด้วย STR_TO_DATE() ใน ORDER BY
สร้างตารางและข้อมูลวันที่แบบข้อความ
mysql> CREATE TABLE DemoTable678 (DueDate VARCHAR(200));
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO DemoTable678 VALUES('March 2019');
mysql> INSERT INTO DemoTable678 VALUES('November 2018');
mysql> INSERT INTO DemoTable678 VALUES('January 2019');
คิวรีเรียงลำดับวันที่ (ใหม่ไปเก่า)
mysql> SELECT * FROM DemoTable678
ORDER BY STR_TO_DATE(DueDate, '%M %Y') DESC;
ผลลัพธ์
+---------------+
| DueDate |
+---------------+
| March 2019 |
| January 2019 |
| November 2018 |
+---------------+
คำอธิบาย Format Specifier:
%M- ชื่อเดือนเต็ม (January, February, ..., December)%Y- ปี 4 หลักSTR_TO_DATE(str, format)- แปลงสตริงเป็น DATE ตามรูปแบบที่กำหนด- ใช้ใน ORDER BY ได้โดยตรง MySQL จะคำนวณสำหรับทุกแถว
แนะนำ: ควรเก็บวันที่ในชนิด DATE หรือ DATETIME ตั้งแต่แรก เพื่อประสิทธิภาพและความถูกต้อง ใช้ VARCHAR เฉพาะกรณีบังคับ (เช่น Import จาก CSV)