MySQL में अल्फान्यूमेरिक स्ट्रिंग (जैसे 'Adam_101') के अंतिम संख्यात्मक भाग के अनुसार सॉर्ट करने के लिए, RIGHT() फंक्शन के साथ ORDER BY का उपयोग करें। यह तब काम करता है जब संख्यात्मक भाग निश्चित लंबाई का हो या अंत में हो।
उदाहरण: अंतिम 3 अंकों द्वारा सॉर्ट
डेमो टेबल बनाएं:
mysql> CREATE TABLE DemoTable1948 (StudentCode VARCHAR(20));
डेटा इन्सर्ट करें:
mysql> INSERT INTO DemoTable1948 VALUES
('121John_567'), ('Adam_101'), ('Bob_563'), ('Sam_346');
डेटा:
+-------------+ | StudentCode | +-------------+ | 121John_567 | | Adam_101 | | Bob_563 | | Sam_346 | +-------------+
RIGHT() के साथ सॉर्ट करें (अंतिम 3 वर्ण):
mysql> SELECT * FROM DemoTable1948 ORDER BY RIGHT(StudentCode, 3);
आउटपुट (101, 346, 563, 567 के अनुसार):
+-------------+ | StudentCode | +-------------+ | Adam_101 | | Sam_346 | | Bob_563 | | 121John_567 | +-------------+
व्याख्या
RIGHT(str, len): स्ट्रिंग के दाएं सेlenवर्ण निकालता हैRIGHT(StudentCode, 3): अंतिम 3 वर्ण ('101', '346', '563', '567')- स्ट्रिंग तुलना: '101' < '346' < '563' < '567' (लेक्सिकोग्राफिक = न्यूमेरिक समान लंबाई के लिए)
सीमाएं और समाधान
समस्या: परिवर्तनीय लंबाई की संख्या
'Adam_1', 'Bob_12', 'Sam_123' → RIGHT(..., 3) देगा '_1', '12', '123' → गलत क्रम
समाधान 1: SUBSTRING_INDEX (अंतिम सेपरेटर के बाद)
ORDER BY CAST(SUBSTRING_INDEX(StudentCode, '_', -1) AS UNSIGNED)
समाधान 2: REGEXP निकालें (MySQL 8.0+)
ORDER BY CAST(REGEXP_SUBSTR(StudentCode, '[0-9]+$') AS UNSIGNED)
समाधान 3: REPLACE के साथ सभी गैर-अंक हटाएं
ORDER BY CAST(REPLACE(REPLACE(StudentCode, '_', ''), 'Adam', '') AS UNSIGNED) -- जटिल स्ट्रिंग्स के लिए अव्यावहारिक
संख्यात्मक कास्टिंग महत्वपूर्ण है
-- स्ट्रिंग तुलना: '100' < '20' (लेक्सिकोग्राफिक) ORDER BY SUBSTRING_INDEX(StudentCode, '_', -1) -- संख्यात्मक तुलना: 20 < 100 ORDER BY CAST(SUBSTRING_INDEX(StudentCode, '_', -1) AS UNSIGNED)
बेहतर डिज़ाइन: अलग कॉलम
उत्पादन में, संख्यात्मक भाग को अलग कॉलम में स्टोर करें:
CREATE TABLE students (
id INT PRIMARY KEY,
code_prefix VARCHAR(20),
code_number INT,
INDEX idx_code_number (code_number)
);
तब सरल: ORDER BY code_number - तेज़, सही, रखरखाव योग्य।