Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lấy phần tử cuối cùng từ chuỗi phân cách bằng dấu phẩy trong MySQL (SUBSTRING_INDEX)

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.