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

MySQL เรียงลำดับข้อความที่มีอักขระพิเศษ เช่น '2321/78/54-6'

เมื่อต้องการเรียงลำดับข้อมูลที่มีรูปแบบเฉพาะและมีอักขระคั่น (Delimiter) สามารถใช้ฟังก์ชัน SUBSTRING() ร่วมกับ CAST() เพื่อแยกส่วนตัวเลขและแปลงเป็นตัวเลขเพื่อเรียงลำดับได้อย่างถูกต้อง

ตัวอย่างการสร้างตารางและข้อมูล

1. สร้างตาราง DemoTable

mysql> CREATE TABLE DemoTable (
    Value VARCHAR(40)
);
Query OK, 0 rows affected (0.59 sec)

2. เพิ่มข้อมูลทดสอบ

mysql> INSERT INTO DemoTable VALUES('2321/78/54-6');
Query OK, 1 row affected (0.15 sec)
mysql> INSERT INTO DemoTable VALUES('2321/78/54-8');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable VALUES('2321/78/54-5');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('2321/78/54-9');
Query OK, 1 row affected (0.21 sec)

3. ข้อมูลก่อนเรียงลำดับ

mysql> SELECT * FROM DemoTable;
+--------------+
| Value        |
+--------------+
| 2321/78/54-6 |
| 2321/78/54-8 |
| 2321/78/54-5 |
| 2321/78/54-9 |
+--------------+

4. คำสั่งเรียงลำดับด้วย SUBSTRING และ CAST

mysql> SELECT * FROM DemoTable
    -> WHERE Value LIKE '2321/78/54%'
    -> ORDER BY SUBSTRING(Value FROM 1 FOR 10),
    -> CAST(SUBSTRING(Value FROM 11) AS DECIMAL);

คำอธิบายคำสั่ง:

  • SUBSTRING(Value FROM 1 FOR 10) : ดึง 10 ตัวอักษรแรก (ส่วนคงที่: 2321/78/54)
  • SUBSTRING(Value FROM 11) : ดึงตัวอักษรตั้งแต่ตำแหน่งที่ 11 เป็นต้นไป (ส่วนตัวเลขสุดท้าย: 6, 8, 5, 9)
  • CAST(... AS DECIMAL) : แปลงสตริงตัวเลขเป็นตัวเลขจริงเพื่อเรียงลำดับตัวเลขได้ถูกต้อง (5, 6, 8, 9)

5. ผลลัพธ์หลังเรียงลำดับ

+--------------+
| Value        |
+--------------+
| 2321/78/54-5 |
| 2321/78/54-6 |
| 2321/78/54-8 |
| 2321/78/54-9 |
+--------------+

สรุป

เทคนิคนี้เหมาะสำหรับข้อมูลที่มีรูปแบบคงที่ (Fixed Pattern) และต้องการเรียงลำดับตามส่วนที่เป็นตัวเลขท้ายสุด โดยการแยกส่วนคงที่และส่วนตัวเลข แล้วแปลงส่วนตัวเลขเป็นชนิดข้อมูลตัวเลขก่อนเรียงลำดับ