संख्यात्मक कन्वर्जन के साथ VARCHAR संख्याओं का सही क्रम
जब संख्याएं VARCHAR में संग्रहीत हों और कुछ में अग्रणी शून्य हों (जैसे '085', '090'), तो वर्णानुक्रम क्रम गलत होता है। संख्यात्मक मान में बदलकर क्रमबद्ध करें।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY yourColumnName*1, yourColumnName;
टेबल और डेटा
mysql> CREATE TABLE DemoTable (
Value VARCHAR(100)
);
Query OK, 0 rows affected (0.62 sec)
mysql> INSERT INTO DemoTable VALUES('90');
Query OK, 1 row affected (0.20 sec)
mysql> INSERT INTO DemoTable VALUES('86');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO DemoTable VALUES('45');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('85');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO DemoTable VALUES('085');
Query OK, 1 row affected (0.14 sec)
mysql> INSERT INTO DemoTable VALUES('090');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable VALUES('045');
Query OK, 1 row affected (0.10 sec)
सभी रिकॉर्ड (डिफ़ॉल्ट क्रम)
mysql> SELECT * FROM DemoTable;
+-------+ | Value | +-------+ | 90 | | 86 | | 45 | | 85 | | 085 | | 090 | | 045 | +-------+ 7 rows in set (0.00 sec)
संख्यात्मक क्रम में क्रमबद्ध करना
mysql> SELECT * FROM DemoTable ORDER BY Value*1, Value;
परिणाम:
+-------+ | Value | +-------+ | 045 | | 45 | | 085 | | 85 | | 86 | | 090 | | 90 | +-------+ 7 rows in set (0.00 sec)
तर्क: Value*1 स्ट्रिंग को संख्या में बदल देता है (अग्रणी शून्य अनदेखी)। समान संख्यात्मक मान के लिए (45 और 045), द्वितीयक क्रम Value (स्ट्रिंग क्रम) से होता है, इसलिए '045' पहले आता है।
बेहतर तरीका: ORDER BY CAST(Value AS UNSIGNED), Value अधिक स्पष्ट और पोर्टेबल है।