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

MySQL में VARCHAR संख्यात्मक कॉलम को CAST के साथ संख्यात्मक क्रम में क्रमबद्ध करना

MySQL में VARCHAR कॉलम में संग्रहीत संख्यात्मक मानों को सही संख्यात्मक क्रम (1, 2, 10, 100 के बजाय 1, 10, 100, 2) में क्रमबद्ध करने के लिए CAST() या CONVERT() का उपयोग करके ORDER BY क्लॉज में संख्यात्मक प्रकार में परिवर्तित करें।

समस्या: स्ट्रिंग क्रमबद्धता

mysql> SELECT * FROM DemoTable726 ORDER BY Value;
+-------+
| Value |
+-------+
| 10    |
| 100   |
| 1000  |
| 110   |
| 2000  |
+-------+
-- स्ट्रिंग क्रम: '1' से शुरू होने वाले पहले आते हैं

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

SELECT * FROM DemoTable726 ORDER BY CAST(Value AS DECIMAL(20,2));

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

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

mysql> CREATE TABLE DemoTable726 (Value VARCHAR(100));
Query OK, 0 rows affected (0.60 sec)

mysql> INSERT INTO DemoTable726 VALUES ('100'), ('10'), ('110'), ('2000'), ('1000');
Query OK, 5 rows affected (0.15 sec)

2. डिफ़ॉल्ट स्ट्रिंग क्रम

mysql> SELECT * FROM DemoTable726 ORDER BY Value;
+-------+
| Value |
+-------+
| 10    |
| 100   |
| 1000  |
| 110   |
| 2000  |
+-------+

3. आरोही संख्यात्मक क्रम

mysql> SELECT * FROM DemoTable726 ORDER BY CAST(Value AS DECIMAL(20,2));
+-------+
| Value |
+-------+
| 10    |
| 100   |
| 110   |
| 1000  |
| 2000  |
+-------+
5 rows in set (0.00 sec)

4. अवरोही संख्यात्मक क्रम

mysql> SELECT * FROM DemoTable726 ORDER BY CAST(Value AS DECIMAL(20,2)) DESC;
+-------+
| Value |
+-------+
| 2000  |
| 1000  |
| 110   |
| 100   |
| 10    |
+-------+
5 rows in set (0.00 sec)

CAST लक्ष्य प्रकार विकल्प

प्रकारउपयोग मामलाउदाहरण
DECIMAL(20,2)सामान्य दशमलव संख्याएँमूल्य, कीमत, माप
UNSIGNEDगैर-ऋणात्मक पूर्णांकआईडी, गिनती, वर्ष
SIGNEDऋणात्मक सहित पूर्णांकतापमान, अंतर
DOUBLEफ्लोटिंग-पॉइंटवैज्ञानिक मान

CONVERT() विकल्प

-- समान परिणाम
ORDER BY CONVERT(Value, DECIMAL(20,2))
ORDER BY CONVERT(Value, UNSIGNED)

गैर-संख्यात्मक मान संभालना

-- गैर-संख्यात्मक को अंत में रखें (0 या बड़ी संख्या देकर)
ORDER BY CASE 
    WHEN Value REGEXP '^[0-9]+(\.[0-9]+)?$' THEN CAST(Value AS DECIMAL(20,2))
    ELSE 99999999999
END;

प्रदर्शन: जनरेटेड कॉलम + इंडेक्स (MySQL 5.7+)

ALTER TABLE DemoTable726 
ADD ValueNum DECIMAL(20,2) AS (CAST(Value AS DECIMAL(20,2))) STORED,
ADD INDEX idx_value_num (ValueNum);

-- फिर सरल क्वेरी
SELECT * FROM DemoTable726 ORDER BY ValueNum;

सर्वोत्तम अभ्यास

  • संभव हो तो संख्यात्मक डेटा के लिए सही संख्यात्मक प्रकार (INT, DECIMAL) उपयोग करें
  • मौजूदा VARCHAR कॉलम के लिए CAST समाधान लागू करें
  • बड़े टेबल्स पर जनरेटेड कॉलम + इंडेक्स पर विचार करें
  1. - MySQL में डोमेन नाम कैसे क्रमबद्ध करें

    डोमेन नाम क्रमबद्ध करने के लिए, ORDER BY SUBSTRING_INDEX() का उपयोग करें। पहले एक टेबल बनाते हैं: mysql> create table DemoTable670(DomainName text); Query OK, 0 rows affected (0.77 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें। यहां हम डोमेन नाम डाल रहे हैं: mysql> insert into De

  1. - MySQL में कैस्केड कैसे देखें

    SHOW CREATE TABLE का उपयोग करके टेबल परिभाषा और कैस्केड देखना कैस्केड देखने के लिए MySQL में SHOW CREATE TABLE का उपयोग करें। पहले टेबल बनाएं: create table DemoTable1378 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, EmployeeId varchar(20), EmployeeFirstName varchar(20), EmployeeLastName varchar(20)

  1. - MySQL में TIME_FORMAT और SUBSTRING से VARCHAR समय को वास्तविक समय में बदलें

    MySQL में SUBSTRING() से घंटे/मिनट निकालकर TIME_FORMAT() से HH:MM प्रारूप में बदल सकते हैं। उदाहरण: HHMM प्रारूप (1620) को HH:MM (04:20) में 1. टेबल बनाएं CREATE TABLE DemoTable1591 (ArrivalTime VARCHAR(20)); 2. डेटा डालें INSERT INTO DemoTable1591 VALUES(1620), (2345), (2210); 3. रूपांतरण क्व