Lấy phần tử tại vị trí cụ thể trong chuỗi CSV với SUBSTRING_INDEX
Kết hợp 2 lần SUBSTRING_INDEX() để trích xuất phần tử thứ N.
Tạo bảng và dữ liệu
mysql> create table DemoTable1615 ( ListOfSubject text ); Query OK, 0 rows affected (0.81 sec)
mysql> insert into DemoTable1615 values('Python,Java,MySQL,MongoDB,C,C++,ASP.net');
Truy vấn lấy phần tử thứ 4
mysql> select substring_index(substring_index(ListOfSubject, ',', 4), ',', -1) as Position
from DemoTable1615;
Kết quả
+----------+ | Position | +----------+ | MongoDB | +----------+
Giải thích cơ chế (vị trí 4):
SUBSTRING_INDEX(ListOfSubject, ',', 4): Lấy 4 phần tử đầu →'Python,Java,MySQL,MongoDB'SUBSTRING_INDEX(..., ',', -1): Lấy phần tử cuối cùng (sau dấu phẩy cuối) →'MongoDB'
Công thức chung cho vị trí N:
SUBSTRING_INDEX(SUBSTRING_INDEX(cot, ',', N), ',', -1)
⚠️ Hạn chế:
- Chỉ hoạt động với chuỗi không có khoảng trắng sau dấu phẩy
- N < 1 hoặc N > số phần tử → kết quả không chính xác
- Hiệu năng kém trên bảng lớn
Thay thế MySQL 8.0+: JSON_EXTRACT(CAST(CONCAT('[', REPLACE(cot, ',', ','), ']') AS JSON), '$[3]') (index 0-based).