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

Lấy phần tên (bỏ tên cuối) từ cột FullName trong MySQL

Vấn đề: Trích xuất chuỗi con bên TRÁI dấu cách cuối cùng

Cột FullName như 'Adam Smith', 'Robert Downey, Jr.'. Cần lấy phần trước dấu cách cuối: 'Adam', 'Robert Downey,'.

Giải pháp: LEFT + LENGTH + LOCATE + REVERSE

Tìm vị trí dấu cách cuối bằng cách reverse chuỗi, tìm dấu cách đầu tiên.

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

CREATE TABLE DemoTable (FullName VARCHAR(50));
INSERT INTO DemoTable VALUES
('Adam Smith'), ('Robert Downey, Jr.'), ('Sylvester Stallone'), ('Chris Hemsworth');

2. Truy vấn

SELECT LEFT(FullName, LENGTH(FullName) - LOCATE(' ', REVERSE(FullName)) + 1) 
FROM DemoTable;

3. Giải thích công thức

  • REVERSE(FullName) – Đảo chuỗi: 'htimS madA', '.rJ ,yenwoD treboR'...
  • LOCATE(' ', REVERSE(...)) – Vị trí dấu cách đầu tiên trong chuỗi đảo = vị trí dấu cách cuối trong chuỗi gốc (tính từ đầu chuỗi đảo).
  • LENGTH(FullName) - vị_trí + 1 – Độ dài phần cần lấy (giữ lại dấu cách cuối).
  • LEFT(FullName, độ_dài) – Cắt phần trái.

4. Kết quả

+---------------------------------------------------------------------+
| LEFT(FullName, LENGTH(FullName) - LOCATE(' ', REVERSE(FullName))+1) |
+---------------------------------------------------------------------+
| Adam                                                                |
| Robert Downey,                                                      |
| Sylvester                                                           |
| Chris                                                               |
+---------------------------------------------------------------------+

Cách đơn giản hơn (MySQL 8.0+): SUBSTRING_INDEX

SELECT SUBSTRING_INDEX(FullName, ' ', 
       LENGTH(FullName) - LENGTH(REPLACE(FullName, ' ', ''))) 
FROM DemoTable;

Đếm số dấu cách = LENGTH(FullName) - LENGTH(REPLACE(FullName, ' ', '')), lấy phần trước dấu cách thứ N (N = số dấu cách).

Lưu ý

  • Công thức phức tạp, khó bảo trì. Cân nhắc tách cột FirstName, LastName khi thiết kế bảng.
  • Xử lý tên phức tạp (middle name, suffix Jr./Sr.) tốt nhất bằng thư viện chuyên dụng ở application layer.