Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เรียงลำดับวันที่ที่เก็บเป็น VARCHAR ใน MySQL ด้วย STR_TO_DATE

บทความนี้สาธิตการเรียงลำดับคอลัมน์ที่เก็บวันที่เป็น 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)