STR_TO_DATE से AM/PM समय स्ट्रिंग को सही क्रम में सॉर्ट करें
वर्चर कॉलम में संग्रहीत '09:45 PM' जैसे AM/PM फॉर्मेट समय को सही कालानुक्रमिक क्रम में सॉर्ट करने के लिए STR_TO_DATE() के साथ ORDER BY का उपयोग करें।
समस्या
स्ट्रिंग के रूप में सॉर्ट करने पर '09:45 PM', '11:56 AM' से पहले आ जाएगा (वर्णानुक्रम में), जो गलत है।
टेबल और डेटा
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserLogoutTime VARCHAR(200)
);
mysql> INSERT INTO DemoTable(UserLogoutTime) VALUES('09:45 PM');
mysql> INSERT INTO DemoTable(UserLogoutTime) VALUES('11:56 AM');
mysql> INSERT INTO DemoTable(UserLogoutTime) VALUES('01:01 AM');
mysql> INSERT INTO DemoTable(UserLogoutTime) VALUES('02:01 PM');
mysql> INSERT INTO DemoTable(UserLogoutTime) VALUES('04:10 PM');
स्ट्रिंग सॉर्ट (गलत)
mysql> SELECT UserLogoutTime FROM DemoTable ORDER BY UserLogoutTime;
+----------------+
| UserLogoutTime |
+----------------+
| 01:01 AM |
| 02:01 PM |
| 04:10 PM |
| 09:45 PM |
| 11:56 AM | -- गलत स्थान पर
+----------------+
सही सॉर्ट: STR_TO_DATE के साथ
mysql> SELECT UserLogoutTime FROM DemoTable
-> ORDER BY STR_TO_DATE(UserLogoutTime, '%l:%i %p');
+----------------+
| UserLogoutTime |
+----------------+
| 01:01 AM |
| 11:56 AM |
| 02:01 PM |
| 04:10 PM |
| 09:45 PM |
+----------------+
फॉर्मेट स्पेसिफायर
| स्पेसिफायर | अर्थ |
|---|---|
%l | घंटा (1-12), अग्रणी शून्य के बिना |
%i | मिनट (00-59) |
%p | AM या PM |
अवरोही क्रम के लिए
ORDER BY STR_TO_DATE(UserLogoutTime, '%l:%i %p') DESC
सर्वोत्तम अभ्यास
समय डेटा के लिए TIME या DATETIME टाइप का उपयोग करें। स्ट्रिंग में समय संग्रहीत करना केवल लिगेसी/इम्पोर्ट स्थितियों के लिए करें।