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

MySQL में VARCHAR फील्ड को संख्यात्मक रूप से कैसे सॉर्ट करें?

VARCHAR कॉलम में संख्यात्मक डेटा स्टोर होने पर डिफ़ॉल्ट सॉर्टिंग लेक्सिकोग्राफिक (अक्षरानुक्रम) होती है: 1, 10, 100, 2, 20...। संख्यात्मक क्रम के लिए LPAD या CAST उपयोग करें।

समस्या प्रदर्शन

mysql> SELECT * FROM SortingvarcharDemo ORDER BY List;
+------+
| List |
+------+
| 1    |
| 199  |
| 78   |
| 9    |
| 99   |
| 999  |
+------+  -- गलत क्रम!

समाधान 1: LPAD के साथ (निर्दिष्ट चौड़ाई)

mysql> SELECT * FROM SortingvarcharDemo 
    -> ORDER BY LPAD(List, 6, '0') ASC;
+------+
| List |
+------+
| 1    |
| 9    |
| 78   |
| 99   |
| 199  |
| 999  |
+------+  -- सही संख्यात्मक क्रम

LPAD(List, 6, '0') मान को बाएं से '0' से पैड करके 6 वर्ण का बनाता है।

समाधान 2: CAST के साथ (अधिक लचीला)

SELECT * FROM SortingvarcharDemo 
ORDER BY CAST(List AS UNSIGNED) ASC;

यह नकारात्मक संख्याओं और दशमलव के लिए भी काम करता है।

समाधान 3: ORDER BY 0+col ट्रिक

SELECT * FROM SortingvarcharDemo 
ORDER BY 0 + List ASC;

MySQL स्ट्रिंग को संख्या में बदलने के लिए अंकगणितीय संक्रिया करता है।

प्रदर्शन नोट

  • CAST और 0+col इंडेक्स उपयोग नहीं कर सकते।
  • बड़े डेटासेट के लिए, संख्यात्मक कॉलम (INT, DECIMAL) उपयोग करना बेहतर।
  • यदि VARCHAR जरूरी है, तो GENERATED COLUMN में संख्यात्मक संस्करण स्टोर करें और उस पर इंडेक्स बनाएं।
  1. - MySQL में अधिकतम से न्यूनतम मान तक क्रमबद्ध करना

    परिचय जब संख्याएं VARCHAR कॉलम में स्टोर होती हैं, तो सामान्य ORDER BY Price DESC लेक्सिकोग्राफिक (स्ट्रिंग) क्रम देता है: 80, 800, 108, 765 → 800, 80, 765, 108 (गलत)। संख्यात्मक क्रम के लिए लंबाई और मान दोनों से क्रमबद्ध करना पड़ता है। उदाहरण: टेबल बनाना और डेटा डालना ); Query OK, 0 rows affected

  1. - MySQL में कस्टम सॉर्टिंग करें

    MySQL में कस्टम सॉर्टिंग करने के लिए ORDER BY FIELD() का उपयोग करें। आइए पहले एक टेबल बनाते हैं: mysql> create table DemoTable -> ( -> Id int -> ); Query OK, 0 rows affected (0.82 sec) इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें: mysql> insert into DemoTable values(101); Q

  1. - MySQL: GROUP BY के साथ फील्ड कैसे अपडेट करें?

    समस्या MySQL सीधे UPDATE में GROUP BY का समर्थन नहीं करता। समाधान: ORDER BY LIMIT का उपयोग करें। उदाहरण टेबल बनाएं: ); डेटा डालें: INSERT INTO DemoTable2018 (EmployeeName, EmployeeSalary) VALUES (Chris, 25400); अपडेट क्वेरी Chris की पहली प्रविष्टि (EmployeeId के अनुसार) का वेतन बढ़ाएं: ORDER B