समस्या
जब दिनांक डेटा VARCHAR या TEXT कॉलम में गैर-मानक प्रारूप (जैसे 'dd/mm/yyyy') में संग्रहीत होता है, तो सामान्य ORDER BY वर्णानुक्रम में सॉर्ट करता है, जो गलत परिणाम देता है।
समाधान: STR_TO_DATE() फ़ंक्शन
STR_TO_DATE() का उपयोग करके स्ट्रिंग को उचित दिनांक में बदलें, फिर ORDER BY करें।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY STR_TO_DATE(yourColumnName, '%d/%m/%Y') DESC;
व्यावहारिक उदाहरण
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE orderByDateFormatDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ArrivalDatetime VARCHAR(100)
-> );
mysql> INSERT INTO orderByDateFormatDemo(ArrivalDatetime) VALUES
-> ('01/10/2012'), ('03/11/2010'), ('04/09/2018'),
-> ('31/01/2019'), ('21/04/2017'), ('23/05/2016');
सामान्य ORDER BY (गलत)
mysql> SELECT * FROM orderByDateFormatDemo ORDER BY ArrivalDatetime DESC;
वर्णानुक्रम: 31/01/2019, 23/05/2016, 21/04/2017, 04/09/2018, 03/11/2010, 01/10/2012
STR_TO_DATE के साथ सही ORDER BY
mysql> SELECT * FROM orderByDateFormatDemo
-> ORDER BY STR_TO_DATE(ArrivalDatetime, '%d/%m/%Y') DESC;
सही परिणाम
| Id | ArrivalDatetime |
|---|---|
| 4 | 31/01/2019 |
| 3 | 04/09/2018 |
| 5 | 21/04/2017 |
| 6 | 23/05/2016 |
| 1 | 01/10/2012 |
| 2 | 03/11/2010 |
सामान्य दिनांक प्रारूप स्पेसिफायर
| प्रारूप | अर्थ | उदाहरण |
|---|---|---|
| %d | दिन (00-31) | 31 |
| %m | महीना (00-12) | 01 |
| %Y | वर्ष (4 अंक) | 2019 |
| %y | वर्ष (2 अंक) | 19 |