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

Truy vấn MySQL lấy giá trị đơn lẻ từ vị trí chuỗi phân cách bằng dấu phẩy

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):

  1. SUBSTRING_INDEX(ListOfSubject, ',', 4): Lấy 4 phần tử đầu → 'Python,Java,MySQL,MongoDB'
  2. 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).