SUBSTRING() के साथ ORDER BY का उपयोग
MySQL में किसी स्ट्रिंग के विशिष्ट भाग के आधार पर परिणाम क्रमबद्ध करने के लिए SUBSTRING() फंक्शन का उपयोग ORDER BY क्लॉज में करें।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY SUBSTRING(yourColumnName, startPosition, length) ASC|DESC;
उदाहरण
1. टेबल बनाना
mysql> CREATE TABLE DemoTable (UserId VARCHAR(200)); Query OK, 0 rows affected (0.68 sec)
2. डेटा डालना
mysql> INSERT INTO DemoTable VALUES('USER_1234');
mysql> INSERT INTO DemoTable VALUES('USER_John');
mysql> INSERT INTO DemoTable VALUES('USER_Sam');
mysql> INSERT INTO DemoTable VALUES('USER_Carol');
mysql> INSERT INTO DemoTable VALUES('USER_Bob');
3. सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable;
+------------+ | UserId | +------------+ | USER_1234 | | USER_John | | USER_Sam | | USER_Carol | | USER_Bob | +------------+ 5 rows in set (0.00 sec)
केस 1: 4th कैरेक्टर के बाद के भाग के आधार पर आरोही क्रम
mysql> SELECT * FROM DemoTable ORDER BY SUBSTRING(UserId, 5) ASC;
+------------+ | UserId | +------------+ | USER_1234 | | USER_Bob | | USER_Carol | | USER_John | | USER_Sam | +------------+ 5 rows in set (0.00 sec)
केस 2: 4th कैरेक्टर के बाद के भाग के आधार पर अवरोही क्रम
mysql> SELECT * FROM DemoTable ORDER BY SUBSTRING(UserId, 5) DESC;
+------------+ | UserId | +------------+ | USER_Sam | | USER_John | | USER_Carol | | USER_Bob | | USER_1234 | +------------+ 5 rows in set (0.00 sec)
SUBSTRING पैरामीटर समझाए गए
SUBSTRING(str, pos)- स्थिति pos से अंत तक (1-आधारित इंडेक्स)SUBSTRING(str, pos, len)- स्थिति pos से len कैरेक्टरSUBSTRING(str FROM pos)- SQL मानक सिंटैक्सSUBSTRING(str FROM pos FOR len)- SQL मानक सिंटैक्स लंबाई के साथ
व्यावहारिक उदाहरण
उत्पाद कोड से संख्यात्मक भाग द्वारा क्रमबद्ध करना
-- PRD-100, PRD-25, PRD-300 जैसे कोड के लिए SELECT * FROM Products ORDER BY CAST(SUBSTRING(ProductCode, 5) AS UNSIGNED);
ईमेल डोमेन द्वारा क्रमबद्ध करना
SELECT * FROM Users ORDER BY SUBSTRING_INDEX(Email, '@', -1);
दिनांक स्ट्रिंग (YYYYMMDD) द्वारा क्रमबद्ध करना
SELECT * FROM Logs
ORDER BY SUBSTRING(LogDate, 1, 4), -- वर्ष
SUBSTRING(LogDate, 5, 2), -- महीना
SUBSTRING(LogDate, 7, 2); -- दिन
प्रदर्शन नोट
बड़े टेबल पर SUBSTRING() के साथ ORDER BY इंडेक्स का उपयोग नहीं कर पाता। बेहतर प्रदर्शन के लिए:
- कंप्यूटेड/जेनरेटेड कॉलम बनाएं और उस पर इंडेक्स डालें
- या एप्लिकेशन लेवल पर सॉर्टिंग करें