Khi cột lưu danh sách giá trị phân cách bằng dấu phẩy (ví dụ: 'Java,C++,MySQL'), hàm SUBSTRING_INDEX(str, delim, count) với count = -1 lấy phần tử **sau dấu phân cách cuối cùng** – tức phần tử cuối.
Cú pháp
SELECT SUBSTRING_INDEX(ten_cot, ',', -1) AS phan_tu_cuoi FROM ten_bang;
count > 0: lấy phần bên trái (tính từ trái).count < 0: lấy phần bên phải (tính từ phải).-1= phần tử cuối.
Ví dụ minh họa
mysql> CREATE TABLE DemoTable1525 (ListOfSubjects TEXT);
mysql> INSERT INTO DemoTable1525 VALUES
-> ('MongoDB,C'),
-> ('Java,C++,MySQL'),
-> ('Python,C++,C,Java');
mysql> SELECT SUBSTRING_INDEX(ListOfSubjects, ',', -1) AS LastValue
-> FROM DemoTable1525;
Kết quả:
+-----------+ | LastValue | +-----------+ | C | | MySQL | | Java | +-----------+
Mở rộng
- Lấy phần tử đầu:
SUBSTRING_INDEX(cot, ',', 1). - Lấy phần tử thứ N từ cuối:
SUBSTRING_INDEX(cot, ',', -N). - Tách tất cả thành hàng riêng: dùng
JSON_TABLE(MySQL 8.0+) sau khi chuyển CSV → JSON array, hoặc stored procedure lặp. - Đếm số phần tử:
LENGTH(cot) - LENGTH(REPLACE(cot, ',', '')) + 1.
⚠️ Lưu ý thiết kế
Lưu danh sách phân cách trong một cột **vi phạm chuẩn hóa (1NF)**. Nên tách thành bảng liên kết (many-to-many) hoặc dùng cột JSON (MySQL 5.7+) để truy vấn, index, validate tốt hơn.