ใช้ SUBSTRING_INDEX() 巢狀 (Nested) เพื่อดึงส่วนที่ N ของสตริงที่คั่นด้วยตัวคั่น
ไวยากรณ์
SUBSTRING_INDEX(SUBSTRING_INDEX(column, delimiter, N), delimiter, -1)
- Inner: ดึงส่วนแรก N ส่วน (รวมตัวคั่น)
- Outer: ดึงส่วนสุดท้ายจากผลลัพธ์ Inner (คือส่วนที่ N)
ตัวอย่าง: ดึงส่วนที่ 3 (นับจากซ้าย) คั่นด้วย /
1. สร้างตารางและข้อมูล
mysql> create table DemoTable (Code varchar(100));
mysql> insert into DemoTable values('/101/102/106'), ('/110/111/101'), ('/111/114/201'), ('/111/118');
2. Query ดึงส่วนที่ 3
mysql> SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 3), '/', -1) FROM DemoTable;
ผลลัพธ์
+-----------------------------------------------------+ | SUBSTRING_INDEX(SUBSTRING_INDEX(Code, '/', 3), '/', -1) | +-----------------------------------------------------+ | 102 | | 111 | | 114 | | 118 | +-----------------------------------------------------+
การประยุกต์: ดึงส่วนที่ N แบบ Dynamic
-- สร้าง Function สำหรับดึงส่วนที่ N CREATE FUNCTION GET_TOKEN(str TEXT, delim VARCHAR(10), n INT) RETURNS TEXT RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(str, delim, n), delim, -1); -- ใช้งาน SELECT GET_TOKEN(Code, '/', 3) FROM DemoTable;
MySQL 8.0+ ใช้ JSON_TABLE (สำหรับคั่นจุลภาค)
SELECT jt.val FROM DemoTable,
JSON_TABLE(CONCAT('["', REPLACE(Code, '/', '","'), '"]'), "$[*]" COLUMNS(val VARCHAR(100) PATH "$")) AS jt;