ปัญหาการจัดเรียง String ที่เป็นตัวเลข
เมื่อคอลัมน์เก็บตัวเลขเป็น VARCHAR การ ORDER BY แบบปกติจะจัดเรียงแบบตัวอักษร (Lexicographical) ทำให้ 9 มากกว่า 124.50
แก้ไขด้วย CAST() หรือ CONVERT()
SELECT * FROM your_table
ORDER BY CAST(your_column AS DECIMAL(10,2)) DESC;
ตัวอย่างการใช้งาน
สร้างตารางและข้อมูล
CREATE TABLE SortingStringDemo (Amount VARCHAR(10));
INSERT INTO SortingStringDemo VALUES ('12.34'), ('124.50'), ('9.59'), ('150.68'), ('600.54');
ข้อมูลก่อนจัดเรียง
+--------+
| Amount |
+--------+
| 12.34 |
| 124.50 |
| 9.59 |
| 150.68 |
| 600.54 |
+--------+
คำสั่งจัดเรียงแบบตัวเลข (มากไปน้อย)
SELECT * FROM SortingStringDemo
ORDER BY CAST(Amount AS DECIMAL(6,2)) DESC;
ผลลัพธ์
+--------+
| Amount |
+--------+
| 600.54 |
| 150.68 |
| 124.50 |
| 12.34 |
| 9.59 |
+--------+
รูปแบบ DECIMAL(M,D)
M= จำนวนหลักทั้งหมด (precision)D= จำนวนหลักหลังจุดทศนิยม (scale)DECIMAL(6,2)รองรับสูงสุด 9999.99
วิธีอื่น: CONVERT()
ORDER BY CONVERT(Amount, DECIMAL(10,2)) DESC
คำแนะนำ: หากเป็นไปได้ ควรเปลี่ยน Data Type เป็น DECIMAL หรือ INT ตั้งแต่ออกแบบตาราง เพื่อประสิทธิภาพและความถูกต้อง