ใช้ CASE ร่วมกับฟังก์ชันสตริง แยกส่วนท้ายหลังเครื่องหมาย - แล้วจัดเรียง
mysql> CREATE TABLE DemoTable (
-> ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ClientName VARCHAR(20)
-> );
Query OK, 0 rows affected (0.54 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike');
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('John');
Query OK, 1 row affected (0.22 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('John-D');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('John-Smith');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike-Smith');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable(ClientName) VALUES('Mike-D');
Query OK, 1 row affected (0.15 sec)
mysql> SELECT * FROM DemoTable;
+----------+------------+ | ClientId | ClientName | +----------+------------+ | 1 | Mike | | 2 | John | | 3 | John-D | | 4 | John-Smith | | 5 | Mike-Smith | | 6 | Mike-D | +----------+------------+ 6 rows in set (0.00 sec)
จัดเรียงตามส่วนท้ายหลัง - (ไม่มี - ให้เป็นค่าว่าง):
mysql> SELECT
-> CASE
-> WHEN RIGHT(ClientName, LENGTH(ClientName) - INSTR(ClientName, '-')) = ClientName THEN ''
-> ELSE RIGHT(ClientName, LENGTH(ClientName) - INSTR(ClientName, '-'))
-> END AS `last`,
-> `ClientName`
-> FROM DemoTable
-> ORDER BY `last`, `ClientName`;
+-------+------------+ | last | ClientName | +-------+------------+ | | John | | | Mike | | D | John-D | | D | Mike-D | | Smith | John-Smith | | Smith | Mike-Smith | +-------+------------+ 6 rows in set (0.00 sec)
ประยุกต์: จัดกลุ่มตาม suffix เช่น รหัสสินค้า, เวอร์ชัน, ประเภทลูกค้า