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

จัดเรียงข้อมูล MySQL ตามตัวอักษรท้ายของสตริง (หลังเครื่องหมาย -)

ใช้ 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 เช่น รหัสสินค้า, เวอร์ชัน, ประเภทลูกค้า