เมื่อตัวเลขเก็บเป็น VARCHAR การจัดเรียงแบบสตริงจะผิด (เช่น '80' > '108') ใช้ LENGTH() จัดเรียงตามความยาวก่อน
mysql> CREATE TABLE DemoTable (
-> Price VARCHAR(20)
-> );
Query OK, 0 rows affected (0.92 sec)
mysql> INSERT INTO DemoTable VALUES('80');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('800');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('108');
Query OK, 1 row affected (0.50 sec)
mysql> INSERT INTO DemoTable VALUES('765');
Query OK, 1 row affected (0.14 sec)
mysql> SELECT * FROM DemoTable;
+-------+ | Price | +-------+ | 80 | | 800 | | 108 | | 765 | +-------+ 4 rows in set (0.00 sec)
จัดเรียงมากไปน้อย: เรียงตามความยาว DESC ก่อน แล้วค่าตัวอักษร DESC:
mysql> SELECT * FROM DemoTable ORDER BY LENGTH(Price) DESC, Price DESC;
+-------+ | Price | +-------+ | 800 | | 765 | | 108 | | 80 | +-------+ 4 rows in set (0.00 sec)
แนวทางที่ดีกว่า: เปลี่ยนชนิดข้อมูลเป็น INT/DECIMAL แล้ว ORDER BY Price DESC ธรรมดา