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

จัดเรียง VARCHAR เป็น FLOAT ใน MySQL ใช้ CAST ไม่ได้ ลองวิธีนี้


หาก 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 แปลงสตริงเป็นตัวเลขอัตโนมัติ