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

การเรียงลำดับคอลัมน์ VARCHAR เป็น FLOAT โดยใช้ตัวดำเนินการ CAST ไม่ทำงานใน MySQL ใช่ไหม


หากนักแสดงของคุณไม่ทำงาน คุณสามารถใช้ yourColumnName*1 กับคำสั่งย่อย ORDER BY

การใช้ชื่อคอลัมน์ของคุณ*1 ไวยากรณ์มีดังนี้:

เลือก yourColumnName1,yourColumnName2,...N จาก yourTableName ORDER BY yourColumnName*1 DESC;

คุณยังสามารถใช้ตัวดำเนินการ CAST() ไวยากรณ์มีดังนี้:

เลือก yourColumnName1,yourColumnName2,...N จาก yourTableName ORDER BY CAST(yourColumnName as DECIMAL(8,2)) DESC;

เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง VarcharColumnAsFloatDemo -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT, -> จำนวน varchar (20), -> คีย์หลัก (Id) -> ); สืบค้นตกลง 0 แถวได้รับผลกระทบ (1.01 วินาที) 

แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้:

mysql> แทรกลงในค่า VarcharColumnAsFloatDemo(Amount) ('3446.23'); สืบค้นตกลง 1 แถวได้รับผลกระทบ (0.10 วินาที)mysql> แทรกลงในค่า VarcharColumnAsFloatDemo(Amount) ('2464.46'); แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว ( 0.16 วินาที) mysql> แทรกลงในค่า VarcharColumnAsFloatDemo (จำนวน) ('6465.78'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.13 วินาที) mysql> แทรกลงในค่า VarcharColumnAsFloatDemo (จำนวน) ('6464.98'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.44 วินาที) mysql> แทรกลงในค่า VarcharColumnAsFloatDemo (จำนวน) ('645.90'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า VarcharColumnAsFloatDemo (จำนวน) ('6465.99'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.23 วินาที) mysql> แทรกลงในค่า VarcharColumnAsFloatDemo (จำนวน) ('3745.76'); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.14 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก VarcharColumnAsFloatDemo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+| รหัส | จำนวน |+---+---------+| 1 | 3446.23 || 2 | 2464.46 || 3 | 6465.78 || 4 | 6464.98 || 5 | 645.90 || 6 | 6465.99 || 7 | 3745.76 |+----+---------+7 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อจัดเรียง varchar เป็น float โดยใช้ตัวดำเนินการ cast:

mysql> เลือก Id, จำนวนจากคำสั่ง VarcharColumnAsFloatDemo โดย cast (Amount as DECIMAL(8,2)) DESC;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+| รหัส | จำนวน |+---+---------+| 6 | 6465.99 || 3 | 6465.78 || 4 | 6464.98 || 7 | 3745.76 || 1 | 3446.23 || 2 | 2464.46 || 5 | 645.90 |+----+---------+7 แถวในชุด (0.00 วินาที)

วิธีที่สองมีดังต่อไปนี้โดยใช้ yourColumnName*1:

mysql> เลือก Id, จำนวนเงินจากลำดับ VarcharColumnAsFloatDemo ตามจำนวน*1 เรียง;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+| รหัส | จำนวน |+---+---------+| 6 | 6465.99 || 3 | 6465.78 || 4 | 6464.98 || 7 | 3745.76 || 1 | 3446.23 || 2 | 2464.46 || 5 | 645.90 |+----+---------+7 แถวในชุด (0.00 วินาที)