MySQL में डॉट वाले स्ट्रिंग्स (जैसे संस्करण संख्या '10.5', '20.5') को संख्यात्मक रूप से क्रमबद्ध करने के लिए CAST(... AS DECIMAL) का उपयोग करें।
समस्या
स्ट्रिंग के रूप में क्रमबद्ध करने पर: '10', '10.5', '11', '20', '20.5' (लेक्सिकोग्राफिक)
संख्यात्मक क्रम: 10, 10.5, 11, 20, 20.5
उदाहरण
mysql> CREATE TABLE DemoTable (Value VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES ('20'), ('10.5'), ('11'), ('10'), ('20.5');
स्ट्रिंग क्रम (डिफ़ॉल्ट)
SELECT * FROM DemoTable ORDER BY Value;
+-------+
| Value |
+-------+
| 10 |
| 10.5 |
| 11 |
| 20 |
| 20.5 |
+-------+
संख्यात्मक क्रम (CAST के साथ)
mysql> SELECT * FROM DemoTable
-> ORDER BY CAST(Value AS DECIMAL) ASC;
परिणाम
+-------+
| Value |
+-------+
| 10 |
| 10.5 |
| 11 |
| 20 |
| 20.5 |
+-------+
इस मामले में समान परिणाम
लेकिन '2', '10', '1.5' के लिए:
- स्ट्रिंग: '1.5', '10', '2'
- संख्यात्मक: 1.5, 2, 10
जटिल संस्करण के लिए (1.2.3)
ORDER BY
CAST(SUBSTRING_INDEX(Version, '.', 1) AS UNSIGNED),
CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(Version, '.', 2), '.', -1) AS UNSIGNED),
CAST(SUBSTRING_INDEX(Version, '.', -1) AS UNSIGNED)
MySQL 8.0+ विकल्प
ORDER BY CAST(Version AS DECIMAL(10,2))
नोट: DECIMAL सटीक अंकगणित के लिए, FLOAT/DOUBLE अनुमानित।