หาก CAST() ไม่ทำงาน ให้ใช้วิธีคูณ 1 (yourColumnName*1) ร่วมกับ ORDER BY
วิธีที่ 1: ใช้ CAST เป็น DECIMAL
SELECT yourColumnName1, yourColumnName2 FROM yourTableName ORDER BY CAST(yourColumnName AS DECIMAL(8,2)) DESC;
วิธีที่ 2: คูณ 1 (Type Coercion)
SELECT yourColumnName1, yourColumnName2 FROM yourTableName ORDER BY yourColumnName*1 DESC;
ตัวอย่างการใช้งาน
สร้างตารางคอลัมน์ Amount เป็น VARCHAR:
mysql> CREATE TABLE VarcharColumnAsFloatDemo ( Id INT NOT NULL AUTO_INCREMENT, Amount VARCHAR(20), PRIMARY KEY(Id) );
เพิ่มข้อมูลตัวเลขในรูปสตริง:
INSERT INTO VarcharColumnAsFloatDemo(Amount) VALUES('3446.23'),('2464.46'),('6465.78'),('6464.98'),('645.90'),('6465.99'),('3745.76');
จัดเรียงด้วย CAST:
mysql> SELECT Id, Amount FROM VarcharColumnAsFloatDemo ORDER BY CAST(Amount AS DECIMAL(8,2)) DESC;
จัดเรียงด้วย *1:
mysql> SELECT Id, Amount FROM VarcharColumnAsFloatDemo ORDER BY Amount*1 DESC;
ผลลัพธ์ทั้ง 2 วิธีเหมือนกัน (เรียงจากมากไปน้อย):
+----+---------+ | Id | Amount | +----+---------+ | 6 | 6465.99 | | 3 | 6465.78 | | 4 | 6464.98 | | 7 | 3745.76 | | 1 | 3446.23 | | 2 | 2464.46 | | 5 | 645.90 | +----+---------+
วิธี *1 สั้นกว่าและทำงานได้ดีใน MySQL เนื่องจาก Type Coercion แปลงสตริงเป็นตัวเลขอัตโนมัติ