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

ดึงส่วนกลางของข้อความที่คั่นด้วย Slash ใน MySQL ด้วย SUBSTRING_INDEX

บทนำ

เมื่อมีข้อความที่คั่นด้วยตัวแบ่ง (Delimiter) เช่น /101/102/106 และต้องการดึงเฉพาะส่วนกลาง (102) สามารถใช้ SUBSTRING_INDEX() 巢狀 (Nested) ได้

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

mysql> CREATE TABLE DemoTable (
    -> Code VARCHAR(100)
    -> );
Query OK, 0 rows affected (1.07 sec)
mysql> INSERT INTO DemoTable VALUES('/101/102/106');
mysql> INSERT INTO DemoTable VALUES('/110/111/101');
mysql> INSERT INTO DemoTable VALUES('/111/114/201');

แสดงข้อมูลทั้งหมด

mysql> SELECT * FROM DemoTable;

ผลลัพธ์

+--------------+
| Code         |
+--------------+
| /101/102/106 |
| /110/111/101 |
| /111/114/201 |
+--------------+
3 rows in set (0.00 sec)

คำสั่งดึงส่วนกลาง (ค่าระหว่าง Slash ตัวที่ 2 และ 3)

mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 3), '/', -1)
    -> FROM DemoTable;

ผลลัพธ์

+-----------------------------------------------------+
| SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 3), '/', -1) |
+-----------------------------------------------------+
| 102                                                 |
| 111                                                 |
| 114                                                 |
+-----------------------------------------------------+
3 rows in set (0.00 sec)

คำอธิบายการทำงาน (Inside-Out)

  1. SUBSTRING_INDEX(Code, '/', 3) - ดึงส่วนตั้งแต่ต้นจนถึง Slash ตัวที่ 3 → /101/102
  2. SUBSTRING_INDEX(..., '/', -1) - จากผลลัพธ์ข้างบน ดึงส่วนหลัง Slash ตัวสุดท้าย → 102

สูตรทั่วไป: ดึงส่วนที่ N (1-based)

SUBSTRING_INDEX(SUBSTRING_INDEX(str, delim, n), delim, -1)

ตัวอย่างเพิ่มเติม

-- ส่วนที่ 1 (หลัง Slash แรก)
SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 2), '/', -1)  -- 101, 110, 111

-- ส่วนที่ 3 (หลัง Slash ที่ 3)
SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 4), '/', -1)  -- 106, 101, 201

-- ส่วนสุดท้าย (ง่ายกว่า)
SUBSTRING_INDEX(Code, '/', -1)  -- 106, 101, 201