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

จัดเรียงตามส่วนของสตริงใน MySQL

การจัดเรียง (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) แทน