สำหรับ MySQL order string ที่มีตัวเลข ต่อไปนี้คือ syntax ซึ่งเราใช้ ORDER BY, SUBSTR() และ CAST() -
SELECT *FROM yourTableName ORDER BYSUBSTR(yourColumnName FROM 1 FOR 2),CAST(SUBSTR(yourColumnName FROM 2) AS UNSIGNED);
เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้ −
mysql> สร้างตาราง OrderByStringWithNumbers -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT, -> Words varchar(10), -> PRIMARY KEY(Id) -> );Query OK, 0 แถวได้รับผลกระทบ (0.86 วินาที)ก่อน>แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้ −
mysql> แทรกลงในค่า OrderByStringWithNumbers(Words) ('A10');Query OK, 1 แถวได้รับผลกระทบ (0.19 วินาที)mysql> แทรกลงใน OrderByStringWithNumbers(Words) values('A30'); Query OK, 1 แถวได้รับผลกระทบ ( 0.19 วินาที)mysql> แทรกลงในค่า OrderByStringWithNumbers(Words) ('A12'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.13 วินาที) mysql> แทรกลงในค่า OrderByStringWithNumbers (Words) ('A11'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.17 วินาที) mysql> แทรกลงในค่า OrderByStringWithNumbers (Words) ('A28'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.13 วินาที) mysql> แทรกลงในค่า OrderByStringWithNumbers (Words) ('A21'); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ ( 0.20 วินาที)แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select -
mysql> เลือก *จาก OrderByStringWithNumbers;ต่อไปนี้เป็นผลลัพธ์ -
<ก่อนหน้า>+----+-------+| รหัส | คำ |+---+-------+| 1 | A10 || 2 | A30 || 3 | A12 || 4 | A11 || 5 | A28 || 6 | A21 |+----+-------+6 แถวในชุด (0.00 วินาที)
นี่คือแบบสอบถามที่จะสั่งซื้อด้วยสตริงที่มีตัวเลข -
mysql> เลือก *จาก OrderByStringWithNumbers โดย -> substr(คำจาก 1 สำหรับ 2), -> cast(substr(Words from 2) AS UNSIGNED);
ต่อไปนี้เป็นผลลัพธ์ -
<ก่อนหน้า>+----+-------+| รหัส | คำ |+---+-------+| 1 | A10 || 4 | A11 || 3 | A12 || 6 | A21 || 5 | A28 || 2 | A30 |+----+-------+6 แถวในชุด (0.00 วินาที)