MySQL में संख्या वाले स्ट्रिंग (जैसे A10, A2, A30) को सही क्रम में ऑर्डर करने के लिए SUBSTR() और CAST() का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTableName
ORDER BY SUBSTR(yourColumnName FROM 1 FOR 2),
CAST(SUBSTR(yourColumnName FROM 2) AS UNSIGNED);
उदाहरण के साथ समझें
सबसे पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE OrderByStringWithNumbers (
-> Id INT NOT NULL AUTO_INCREMENT,
-> Words VARCHAR(10),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.86 sec)
रिकॉर्ड डालें
mysql> INSERT INTO OrderByStringWithNumbers(Words) VALUES('A10');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO OrderByStringWithNumbers(Words) VALUES('A30');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO OrderByStringWithNumbers(Words) VALUES('A12');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO OrderByStringWithNumbers(Words) VALUES('A11');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO OrderByStringWithNumbers(Words) VALUES('A28');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO OrderByStringWithNumbers(Words) VALUES('A21');
Query OK, 1 row affected (0.20 sec)
सभी रिकॉर्ड देखें (डिफ़ॉल्ट स्ट्रिंग सॉर्ट)
mysql> SELECT * FROM OrderByStringWithNumbers;
आउटपुट
+----+-------+ | Id | Words | +----+-------+ | 1 | A10 | | 2 | A30 | | 3 | A12 | | 4 | A11 | | 5 | A28 | | 6 | A21 | +----+-------+ 6 rows in set (0.00 sec)
डिफ़ॉल्ट स्ट्रिंग सॉर्ट में A10, A11, A12, A21, A28, A30 के बजाय A10, A12, A11... आता है (लेक्सिकोग्राफिक क्रम)।
सही संख्यात्मक क्रम में ऑर्डर करें
mysql> SELECT * FROM OrderByStringWithNumbers
-> ORDER BY SUBSTR(Words FROM 1 FOR 2),
-> CAST(SUBSTR(Words FROM 2) AS UNSIGNED);
आउटपुट
+----+-------+ | Id | Words | +----+-------+ | 1 | A10 | | 4 | A11 | | 3 | A12 | | 6 | A21 | | 5 | A28 | | 2 | A30 | +----+-------+ 6 rows in set (0.00 sec)
व्याख्या:
SUBSTR(Words FROM 1 FOR 2)- पहले 2 कैरेक्टर (प्रीफिक्स 'A') से सॉर्टCAST(SUBSTR(Words FROM 2) AS UNSIGNED)- दूसरे कैरेक्टर से अंत तक के भाग को अनसाइन्ड इंटीजर में कास्ट करके संख्यात्मक सॉर्ट
परिणाम: A10, A11, A12, A21, A28, A30 - सही संख्यात्मक क्रम।