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

MySQL में VARCHAR डेटा को क्रमबद्ध करना जिसमें संख्या और स्ट्रिंग दोनों हों

MySQL में VARCHAR कॉलम जिसमें संख्यात्मक और गैर-संख्यात्मक मान दोनों हों, को संख्यात्मक क्रम में क्रमबद्ध करने के लिए CAST() और IF() फ़ंक्शन्स का संयोजन उपयोग करें।

समस्या

डिफ़ॉल्ट स्ट्रिंग क्रमबद्धता में '100', '190' से पहले आता है, लेकिन 'John' संख्याओं के साथ मिश्रित हो जाता है।

समाधान: CAST के साथ ORDER BY IF

SELECT * FROM DemoTable 
ORDER BY IF(CAST(EmployeeCode AS SIGNED) = 0, 99999999999, CAST(EmployeeCode AS SIGNED));

व्यावहारिक उदाहरण

1. टेबल बनाएं और डेटा डालें

mysql> CREATE TABLE DemoTable (EmployeeCode VARCHAR(100));
Query OK, 0 rows affected (1.17 sec)

mysql> INSERT INTO DemoTable VALUES ('190'), ('100'), ('John'), ('120');
Query OK, 4 rows affected (0.20 sec)

2. डिफ़ॉल्ट क्रमबद्धता (स्ट्रिंग क्रम)

mysql> SELECT * FROM DemoTable ORDER BY EmployeeCode;
+--------------+
| EmployeeCode |
+--------------+
| 100          |
| 120          |
| 190          |
| John         |
+--------------+
4 rows in set (0.00 sec)

3. संख्यात्मक क्रमबद्धता (संख्याएं पहले, फिर स्ट्रिंग्स)

mysql> SELECT * FROM DemoTable 
ORDER BY IF(CAST(EmployeeCode AS SIGNED) = 0, 99999999999, CAST(EmployeeCode AS SIGNED));
+--------------+
| EmployeeCode |
+--------------+
| 100          |
| 120          |
| 190          |
| John         |
+--------------+
4 rows in set, 1 warning (0.00 sec)

व्याख्या

  • CAST(EmployeeCode AS SIGNED) - स्ट्रिंग को संख्या में बदलता है
  • गैर-संख्यात्मक स्ट्रिंग्स के लिए CAST 0 लौटाता है
  • IF(CAST(...) = 0, बड़ी_संख्या, CAST(...)) - गैर-संख्याओं को अंत में भेजता है
  • चेतावनी: गैर-संख्यात्मक स्ट्रिंग्स के लिए CAST चेतावनी देता है (हानिरहित)

बेहतर विकल्प: REGEXP (MySQL 8.0+)

SELECT * FROM DemoTable
ORDER BY 
    CASE 
        WHEN EmployeeCode REGEXP '^[0-9]+$' THEN CAST(EmployeeCode AS UNSIGNED)
        ELSE 99999999999
    END;

वर्णमाला क्रम में स्ट्रिंग्स, संख्यात्मक क्रम में संख्याएं

SELECT * FROM DemoTable
ORDER BY 
    (EmployeeCode REGEXP '^[0-9]+$') DESC,  -- संख्याएं पहले (1), फिर स्ट्रिंग्स (0)
    CAST(EmployeeCode AS UNSIGNED),         -- संख्याओं के लिए संख्यात्मक क्रम
    EmployeeCode;                           -- स्ट्रिंग्स के लिए वर्णमाला क्रम
  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 | +---------------

  1. - MySQL में स्ट्रिंग और नंबर के मिश्रण के लिए कौन सा डेटा टाइप उपयोग करें?

    VARCHAR() डेटा टाइप स्ट्रिंग और नंबर दोनों स्टोर करने के लिए VARCHAR() सबसे उपयुक्त है: CREATE TABLE yourTableName ( yourColumnName1 VARCHAR(40) ); उदाहरण insert into demo28(user_id) values(John_123), (David_44), (Mike99), (Sam101); परिणाम +----+----------+ | id | user_id | +----+----------+ |