ใช้ 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]+$')ดึงตัวเลขท้ายได้ตรงไปตรงมา