การจัดเรียง (ORDER BY) ตามส่วนหนึ่งของสตริงใน MySQL
ใช้ฟังก์ชัน SUBSTRING() (หรือ SUBSTR()) ภายในคำสั่ง ORDER BY เพื่อจัดเรียงตามส่วนที่ต้องการของสตริง
SELECT * FROM yourTableName ORDER BY SUBSTRING(yourColumnName, startPosition) ASC|DESC;
ตัวอย่างการใช้งาน
สร้างตารางมีคอลัมน์ UserId รูปแบบ USER_xxxxx:
mysql> create table DemoTable (UserId varchar(200));
mysql> insert into DemoTable values('USER_1234');
mysql> insert into DemoTable values('USER_John');
mysql> insert into DemoTable values('USER_Sam');
mysql> insert into DemoTable values('USER_Carol');
mysql> insert into DemoTable values('USER_Bob');
ข้อมูลต้นฉบับ:
+------------+ | UserId | +------------+ | USER_1234 | | USER_John | | USER_Sam | | USER_Carol | | USER_Bob | +------------+
กรณีที่ 1: จัดเรียงตามส่วนหลังตัวอักษรที่ 4 (หลัง "USER_") แบบ Ascending
mysql> select * from DemoTable order by substring(UserId, 4) asc;
+------------+ | UserId | +------------+ | USER_1234 | | USER_Bob | | USER_Carol | | USER_John | | USER_Sam | +------------+
กรณีที่ 2: จัดเรียงแบบ Descending
mysql> select * from DemoTable order by substring(UserId, 4) desc;
+------------+ | UserId | +------------+ | USER_Sam | | USER_John | | USER_Carol | | USER_Bob | | USER_1234 | +------------+
หมายเหตุ: SUBSTRING(str, pos) เริ่มนับตำแหน่งจาก 1 | ตัวอย่างนี้ SUBSTRING(UserId, 4) จะได้ค่า _1234, _John, _Sam... ซึ่ง Underscore (_) มีค่า ASCII น้อยกว่าตัวอักษร/ตัวเลข จึงมาก่อนเสมอ | หากต้องการข้าม Prefix "USER_" ให้ใช้ SUBSTRING(UserId, 6) แทน