MySQL में अल्फान्यूमेरिक कोड (जैसे '100A', '101J') को संख्यात्मक भाग के अनुसार क्रमबद्ध करने के लिए ORDER BY column+0, column तकनीक का उपयोग करें।
समस्या
स्ट्रिंग क्रम: '100A', '100B', '101J', '101S', '103M' (लेक्सिकोग्राफिक)
वांछित क्रम: संख्यात्मक भाग पहले, फिर अक्षर
उदाहरण
mysql> CREATE TABLE DemoTable (StudentCode VARCHAR(20));
mysql> INSERT INTO DemoTable VALUES ('101J'), ('100A'), ('100B'), ('101S'), ('103M');
क्वेरी
mysql> SELECT * FROM DemoTable ORDER BY StudentCode+0, StudentCode;
परिणाम
+-------------+
| StudentCode |
+-------------+
| 100A |
| 100B |
| 101J |
| 101S |
| 103M |
+-------------+
कैसे काम करता है
StudentCode+0- स्ट्रिंग को संख्या में बदलता है (अग्रणी अंक पढ़ता है, फिर रुक जाता है)- '100A'+0 = 100, '101J'+0 = 101, '103M'+0 = 103
- संख्यात्मक क्रम: 100, 100, 101, 101, 103
- टाई होने पर दूसरा
StudentCodeस्ट्रिंग क्रम लागू करता है
चेतावनी
5 warnings: Truncated incorrect INTEGER value: '100A'
ये चेतावनियां सामान्य हैं क्योंकि गैर-संख्यात्मक भाग काट दिया जाता है।
बेहतर विकल्प (MySQL 8.0+)
ORDER BY CAST(StudentCode AS UNSIGNED), StudentCode
जटिल पैटर्न के लिए
-- 'A-100', 'B-20' जैसे पैटर्न
ORDER BY
CAST(SUBSTRING_INDEX(StudentCode, '-', -1) AS UNSIGNED),
StudentCode
उपयोग केस
- उत्पाद कोड: SKU-100, SKU-20
- दस्तावेज़ संख्या: INV-2024-001
- संस्करण: v1.2, v1.10