บทนำ
เมื่อมีข้อความที่คั่นด้วยตัวแบ่ง (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)
SUBSTRING_INDEX(Code, '/', 3)- ดึงส่วนตั้งแต่ต้นจนถึง Slash ตัวที่ 3 →/101/102SUBSTRING_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