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

Cách tách cột trong MySQL

Tách chuỗi theo dấu phân cách với SUBSTRING_INDEX() trong MySQL

Hàm SUBSTRING_INDEX(chuoi, dau_phan_cach, so_lan) trích xuất phần trước hoặc sau dấu phân cách thứ N.

Tạo bảng và dữ liệu

mysql> create table DemoTable ( Name varchar(40) ); 
mysql> insert into DemoTable values('John_Smith'); 
mysql> insert into DemoTable values('Carol_Taylor'); 
mysql> insert into DemoTable values('David_Miller');

Truy vấn tách lấy phần trước dấu '_' (Họ)

mysql> select if(locate('_',Name)=0,'',substring_index(Name, '_', 1)) from DemoTable;

Kết quả

+---------------------------------------------------------+ 
| if(locate('_',Name)=0,'',substring_index(Name, '_', 1)) | 
+---------------------------------------------------------+ 
| John                                                    | 
| Carol                                                   | 
| David                                                   | 
+---------------------------------------------------------+

Giải thích:

  • LOCATE('_', Name): Tìm vị trí dấu '_', trả về 0 nếu không có
  • IF(LOCATE=0, '', ...): Nếu không có dấu '_', trả về chuỗi rỗng
  • SUBSTRING_INDEX(Name, '_', 1): Lấy phần trước dấu '_' đầu tiên (số dương = tính từ trái)

Lấy phần sau dấu '_' (Tên):

SELECT SUBSTRING_INDEX(Name, '_', -1) FROM DemoTable; 
-- Kết quả: Smith, Taylor, Miller

Tách nhiều phần (MySQL 8.0+): Dùng REGEXP_SUBSTR hoặc JSON_TABLE sau khi replace dấu phân cách thành JSON array.

Thiết kế tốt hơn: Tách sẵn thành 2 cột FirstName, LastName khi INSERT, tránh tách lúc truy vấn (chậm, dễ lỗi).