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

การจัดเรียงวันที่ใน MySQL รูปแบบ '01 August 2019' ด้วย STR_TO_DATE

เมื่อจัดเก็บวันที่เป็นข้อความ (VARCHAR) ในรูปแบบ مثل '01 August 2019' การจัดเรียงตามลำดับวันที่จริงจะไม่ได้ผลถ้าใช้ ORDER BY ธรรมดา เนื่องจากจะเรียงตามตัวอักษร ต้องใช้ฟังก์ชัน STR_TO_DATE() เพื่อแปลงเป็นวันที่จริงก่อนจึงจะเรียงได้ถูกต้อง

ตัวอย่างการใช้งาน

สร้างตารางเก็บวันที่เป็นข้อความ:

mysql> CREATE TABLE DemoTable1435 (
    -> DueDate VARCHAR(60)
    -> );

เพิ่มข้อมูลวันที่รูปแบบต่างๆ:

mysql> INSERT INTO DemoTable1435 VALUES ('01 August 2019');
mysql> INSERT INTO DemoTable1435 VALUES ('01 Feb 2018');
mysql> INSERT INTO DemoTable1435 VALUES ('31 Jan 2017');
mysql> INSERT INTO DemoTable1435 VALUES ('01 March 2019');

ดูข้อมูลก่อนจัดเรียง:

mysql> SELECT * FROM DemoTable1435;
+----------------+
| DueDate        |
+----------------+
| 01 August 2019 |
| 01 Feb 2018    |
| 31 Jan 2017    |
| 01 March 2019  |
+----------------+

จัดเรียงด้วย STR_TO_DATE() โดยระบุรูปแบบวันที่:

mysql> SELECT * FROM DemoTable1435
    -> ORDER BY STR_TO_DATE(DueDate, '%d %M %Y');

ผลลัพธ์ที่จัดเรียงถูกต้องตามลำดับเวลา:

+----------------+
| DueDate        |
+----------------+
| 31 Jan 2017    |
| 01 Feb 2018    |
| 01 March 2019  |
| 01 August 2019 |
+----------------+

รูปแบบวันที่ที่ใช้บ่อย (Format Specifiers)

ตัวอักษรความหมายตัวอย่าง
%dวัน (00-31)01, 31
%Mชื่อเดือนเต็มJanuary, August
%bชื่อเดือนย่อJan, Aug
%Yปี 4 หลัก2019
%yปี 2 หลัก19

คำแนะนำ

  • ควรจัดเก็บวันที่ในชนิดข้อมูล DATE หรือ DATETIME แทน VARCHAR เพื่อประสิทธิภาพและความถูกต้อง
  • หากต้องจัดเก็บเป็นข้อความ ให้ใช้รูปแบบมาตรฐาน ISO (YYYY-MM-DD) เพื่อให้เรียงได้โดยไม่ต้องแปลง
  • STR_TO_DATE() คืนค่า NULL หากรูปแบบไม่ตรงกัน ดังนั้นควรตรวจสอบข้อมูลก่อนใช้งาน