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

จัดเรียงเฉพาะตัวเลขจากสตริง Alphanumeric ใน MySQL ด้วย RIGHT()

ใช้ ORDER BY RIGHT(คอลัมน์, จำนวนตัวอักษร) เพื่อจัดเรียงตามตัวเลขท้ายสตริง (สมมติตัวเลขอยู่ท้ายและความยาวคงที่)

ตัวอย่างการใช้งาน

สร้างตารางรหัสนักเรียน (รูปแบบผสมตัวอักษร-ตัวเลข):

mysql> create table DemoTable1948 (StudentCode varchar(20));

เพิ่มข้อมูล:

mysql> insert into DemoTable1948 values('121John_567'),('Adam_101'),('Bob_563'),('Sam_346');

ดูข้อมูล:

mysql> select * from DemoTable1948;
+-------------+
| StudentCode |
+-------------+
| 121John_567 |
| Adam_101    |
| Bob_563     |
| Sam_346     |
+-------------+
4 rows in set (0.00 sec)

คิวรีจัดเรียงตามตัวเลข 3 ตัวท้าย

mysql> select * from DemoTable1948 order by RIGHT(StudentCode, 3);

ผลลัพธ์ (เรียง 101, 346, 563, 567):

+-------------+
| StudentCode |
+-------------+
| Adam_101    |
| Sam_346     |
| Bob_563     |
| 121John_567 |
+-------------+
4 rows in set (0.00 sec)

ข้อจำกัดและวิธีแก้

  • สมมติฐาน: ตัวเลขอยู่ท้ายเสมอ และมีความยาวเท่ากัน (3 ตัว)
  • กรณีทั่วไป: ตัวเลขความยาวไม่เท่ากัน หรืออยู่กลางสตริง → ใช้ REGEXP หรือ CAST/SUBSTRING_INDEX
  • ตัวอย่างแยกตัวเลขท้ายความยาวไม่คงที่:
    ORDER BY CAST(SUBSTRING_INDEX(StudentCode, '_', -1) AS UNSIGNED)
  • MySQL 8.0+: ใช้ REGEXP_SUBSTR(StudentCode, '[0-9]+$') ดึงตัวเลขท้ายได้ตรงไปตรงมา