การจัดรูปแบบวันที่ในรูปแบบ DD/MM/YYYY และเรียงลำดับจากมากไปน้อย
เมื่อต้องการจัดรูปแบบวันที่ให้อยู่ในรูปแบบ DD/MM/YYYY และเรียงลำดับข้อมูลจากวันที่ล่าสุดไปเก่าสุด (Descending) สามารถใช้ฟังก์ชัน STR_TO_DATE() ร่วมกับคำสั่ง ORDER BY ได้
รูปแบบคำสั่ง (Syntax)
SELECT * FROM yourTableName
WHERE yourDatetimeColumnName
ORDER BY STR_TO_DATE(yourDatetimeColumnName, '%d/%m/%Y') DESC;
คำสั่งด้านบนจะดึงข้อมูลทั้งหมดและเรียงลำดับตามวันที่จากใหม่ไปเก่า โดยแปลงสตริงวันที่ให้เป็นค่าประเภท DATE ก่อนจึงทำการเรียงลำดับ
ตัวอย่างการใช้งานจริง
สร้างตารางตัวอย่างชื่อ DateFormatWithSelect:
CREATE TABLE DateFormatWithSelect (
UserId INT,
UserName VARCHAR(100),
UserLoginDatetime VARCHAR(100)
);
เพิ่มข้อมูลตัวอย่าง:
INSERT INTO DateFormatWithSelect VALUES
(101, 'John', '20/10/2016'),
(102, 'David', '21/09/2015'),
(103, 'Carol', '21/12/2018'),
(104, 'Mike', '2/8/2014'),
(105, 'Sam', '21/11/2017'),
(106, 'Bob', '21/12/2013');
แสดงข้อมูลก่อนเรียงลำดับ:
SELECT * FROM DateFormatWithSelect;
ผลลัพธ์:
| UserId | UserName | UserLoginDatetime |
|---|---|---|
| 101 | John | 20/10/2016 |
| 102 | David | 21/09/2015 |
| 103 | Carol | 21/12/2018 |
| 104 | Mike | 2/8/2014 |
| 105 | Sam | 21/11/2017 |
| 106 | Bob | 21/12/2013 |
คำสั่งเรียงลำดับวันที่จากใหม่ไปเก่า:
SELECT * FROM DateFormatWithSelect
WHERE UserLoginDatetime
ORDER BY STR_TO_DATE(UserLoginDatetime, '%d/%m/%Y') DESC;
ผลลัพธ์หลังเรียงลำดับ:
| UserId | UserName | UserLoginDatetime |
|---|---|---|
| 103 | Carol | 21/12/2018 |
| 105 | Sam | 21/11/2017 |
| 101 | John | 20/10/2016 |
| 102 | David | 21/09/2015 |
| 104 | Mike | 2/8/2014 |
| 106 | Bob | 21/12/2013 |
หมายเหตุ: รูปแบบ %d/%m/%Y หมายถึง วันที่/เดือน/ปี 4 หลัก สามารถปรับเปลี่ยนรูปแบบได้ตามข้อมูลที่มีอยู่ เช่น %d-%m-%Y สำหรับวันที่คั่นด้วยขีดกลาง