VARCHAR कॉलम को संख्या के रूप में सॉर्ट करना
संख्यात्मक डेटा VARCHAR कॉलम में स्टोर होने पर ORDER BY स्ट्रिंग सॉर्ट करता है (1, 10, 100, 2, 20...।)। संख्यात्मक सॉर्ट के लिए + 0 या CAST() उपयोग करें।
समस्या: स्ट्रिंग सॉर्ट
+------------+ | RankNumber | +------------+ | -100 | | -110 | | 0 | | 50 | | 98 | +------------+
स्ट्रिंग सॉर्ट: -100, -110, 0, 50, 98 (गलत क्रम)
समाधान 1: + 0 ट्रिक
SELECT RankNumber FROM selectOrderdemo ORDER BY RankNumber + 0 DESC;
+------------+ | RankNumber | +------------+ | 98 | | 50 | | 0 | | -100 | | -110 | +------------+
समाधान 2: CAST()
SELECT RankNumber FROM selectOrderdemo ORDER BY CAST(RankNumber AS SIGNED) DESC;
समाधान 3: UNSIGNED
SELECT RankNumber FROM selectOrderdemo ORDER BY CAST(RankNumber AS UNSIGNED) DESC;
उदाहरण: टेबल और डेटा
mysql> CREATE TABLE selectOrderdemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(100),
-> RankNumber VARCHAR(100)
-> );
mysql> INSERT INTO selectOrderdemo(Name, RankNumber) VALUES
('Larry', '-100'), ('John', '50'), ('Bob', '0'), ('Carol', '-110'), ('David', '98');
सभी कॉलम के साथ संख्यात्मक सॉर्ट
mysql> SELECT * FROM selectOrderdemo ORDER BY RankNumber + 0 DESC;
+----+-------+------------+ | Id | Name | RankNumber | +----+-------+------------+ | 5 | David | 98 | | 2 | John | 50 | | 3 | Bob | 0 | | 1 | Larry | -100 | | 4 | Carol | -110 | +----+-------+------------+
तुलना
| विधि | पोर्टेबिलिटी | प्रदर्शन | नोट |
|---|---|---|---|
col + 0 | MySQL-विशिष्ट | तेज़ | इम्प्लिसिट कास्ट |
CAST(col AS SIGNED) | ANSI SQL | अच्छा | स्पष्ट, नेगेटिव सपोर्ट |
CAST(col AS UNSIGNED) | ANSI SQL | अच्छा | केवल पॉजिटिव |