Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จัดเรียงตัวเลขที่เก็บเป็น String ใน MySQL ด้วย CAST()


ปัญหาการจัดเรียง 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 ตั้งแต่ออกแบบตาราง เพื่อประสิทธิภาพและความถูกต้อง