SUBSTRING_INDEX: ดึงส่วนท้ายหลัง Delimiter สุดท้าย
ฟังก์ชัน SUBSTRING_INDEX(str, delim, count) เมื่อ count < 0 จะคืน substring หลัง Delimiter ตัวที่ |count| นับจากขวา → ใช้ดึงค่าสุดท้ายของ CSV ได้
สร้างตารางและข้อมูล (Comma-Separated Values)
mysql> CREATE TABLE DemoTable1525 (ListOfSubjects TEXT);
Query OK, 0 rows affected (1.13 sec)
mysql> INSERT INTO DemoTable1525 VALUES
-> ('MongoDB,C'), ('Java,C++,MySQL'), ('Python,C++,C,Java');
Query OK, 3 rows affected
ข้อมูลทั้งหมด
+-------------------+ | ListOfSubjects | +-------------------+ | MongoDB,C | | Java,C++,MySQL | | Python,C++,C,Java | +-------------------+
คำสั่ง: ดึงค่าสุดท้าย (หลัง Comma ตัวสุดท้าย)
mysql> SELECT SUBSTRING_INDEX(ListOfSubjects, ',', -1) AS LastValue
-> FROM DemoTable1525;
ผลลัพธ์
+-----------+ | LastValue | +-----------+ | C | | MySQL | | Java | +-----------+
คำอธิบาย SUBSTRING_INDEX(str, ',', -1)
| ListOfSubjects | Comma Positions | Count=-1 (หลัง Comma ตัวสุดท้าย) |
|---|---|---|
| MongoDB,C | 1 Comma | C |
| Java,C++,MySQL | 2 Commas | MySQL |
| Python,C++,C,Java | 3 Commas | Java |
ดึงค่าแรก (Count = 1)
SELECT SUBSTRING_INDEX(ListOfSubjects, ',', 1) AS FirstValue FROM DemoTable1525;
+-------------+ | FirstValue | +-------------+ | MongoDB | | Java | | Python | +-------------+
ดึงค่าที่ N (เช่น ตัวที่ 2)
-- ตัวที่ 2: SUBSTRING_INDEX(SUBSTRING_INDEX(str, ',', 2), ',', -1) SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ListOfSubjects, ',', 2), ',', -1) AS SecondValue FROM DemoTable1525;
MySQL 8.0: ใช้ JSON_TABLE (ถ้าเก็บเป็น JSON Array)
-- หากเก็บเป็น JSON: '["MongoDB", "C"]' SELECT jt.val FROM DemoTable1525, JSON_TABLE(ListOfSubjects, '$[*]' COLUMNS (val VARCHAR(50) PATH '$')) AS jt;
⚠️ ข้อควรระวัง
- ทำงานกับ String ธรรมดา ไม่ Parse CSV จริง (ไม่จัดการ Quoted Comma, Escaped Quote)
- หากข้อมูลมี Comma ในค่า (เช่น 'A,B', 'C') จะนับผิด → ควรเก็บเป็น JSON Array หรือ Normalized Table
- Performance: SUBSTRING_INDEX เร็วกว่า REGEXP/LOCATE Loop