Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> MySQL

MySQL में अल्फान्यूमेरिक स्ट्रिंग से केवल संख्या निकालकर कैसे सॉर्ट करें?

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 - तेज़, सही, रखरखाव योग्य।

  1. - MySQL में SUBSTRING_INDEX से स्ट्रिंग से दिनांक निकालें

    MySQL में SUBSTRING_INDEX() फ़ंक्शन का उपयोग करके स्ट्रिंग के अंतिम भाग से दिनांक निकाल सकते हैं जब दिनांक एक ज्ञात विभाजक के बाद आता है। सिंटैक्स SUBSTRING_INDEX(SUBSTRING_INDEX(स्ट्रिंग, विभाजक, -1), विभाजक, 1) उदाहरण: लेबल.दिनांक प्रारूप से दिनांक निकालना 1. टेबल बनाएं ); 2. डेटा डालें INSE

  1. - MySQL में संख्याओं के साथ मिश्रित वर्ण कॉलम से वर्ण मान सॉर्ट करें?

    आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Code varchar(20) -> ); Query OK, 0 rows affected (0.70 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(J23); Query OK, 1 row affected (0.17 sec) mysql> insert into De

  1. - MySQL में SELECT और SHOW कमांड के परिणामों को कैसे संयोजित करें

    समाधान उपयोगकर्ता-परिभाषित वेरिएबल (@) या सिस्टम वेरिएबल (@@) का उपयोग करके एक ही SELECT में कई मान दिखाएं। उपयोगकर्ता वेरिएबल SELECT @first_name AS EmployeeFirstName, @last_name AS EmployeeLastName; +-------------------+------------------+ | EmployeeFirstName | EmployeeLastName | +---------------