ใช้ CAST(... AS DECIMAL) เพื่อจัดเรียงตัวเลขใน VARCHAR ให้ถูกต้อง
สร้างตารางและเพิ่มข้อมูล
mysql> create table DemoTable ( Value varchar(20) ); Query OK, 0 rows affected (0.53 sec)
mysql> insert into DemoTable values('20');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('10.5');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('11');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('10');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('20.5');
Query OK, 1 row affected (0.13 sec)
คิวรี่จัดเรียงเป็นตัวเลข
mysql> select * from DemoTable order by CAST(Value AS DECIMAL) ASC;
ผลลัพธ์
+-------+ | Value | +-------+ | 10 | | 10.5 | | 11 | | 20 | | 20.5 | +-------+ 5 rows in set (0.00 sec)
ปัญหา: VARCHAR เรียงแบบสตริง '10.5' < '11' (เพราะ '1'='1', '0'<'1') แต่ '20' < '10.5' (เพราะ '2'>'1') | แก้: CAST เป็น DECIMAL จะเปรียบเทียบค่าตัวเลขจริง