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

Cách tách từ đầu tiên từ chuỗi trong MySQL (SUBSTRING_INDEX)


Cú pháp

Sử dụng SUBSTRING_INDEX() với delimiter là khoảng trắng và count = 1:

SELECT SUBSTRING_INDEX(ten_cot, ' ', 1) AS tu_dau_tien FROM ten_bang;

Ví dụ chi tiết

1. Tạo bảng

mysql> CREATE TABLE FirstWordDemo ( 
-> AllWords LONGTEXT 
-> ); 
Query OK, 0 rows affected (0.83 sec)

2. Chèn dữ liệu

mysql> INSERT INTO FirstWordDemo VALUES('This is the first MySQL Query'); 
Query OK, 1 row affected (0.11 sec) 
mysql> INSERT INTO FirstWordDemo VALUES('MySQL is a Relational Database'); 
Query OK, 1 row affected (0.17 sec) 
mysql> INSERT INTO FirstWordDemo VALUES('FirstWord is not correct'); 
Query OK, 1 row affected (0.21 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM FirstWordDemo;
+--------------------------------+ 
| AllWords                       | 
+--------------------------------+ 
| This is the first MySQL Query  | 
| MySQL is a Relational Database | 
| FirstWord is not correct       | 
+--------------------------------+ 
3 rows in set (0.00 sec)

4. Lấy từ đầu tiên

mysql> SELECT SUBSTRING_INDEX(AllWords, ' ', 1) AS MyFirstWordResult FROM FirstWordDemo;
+-------------------+ 
| MyFirstWordResult | 
+-------------------+ 
| This              | 
| MySQL             | 
| FirstWord         | 
+-------------------+ 
3 rows in set (0.00 sec)

Giải thích SUBSTRING_INDEX

SUBSTRING_INDEX(str, delim, count)
-- count > 0: Trả về phần trước delimiter thứ count (từ trái sang)
-- count < 0: Trả về phần sau delimiter thứ |count| (từ phải sang)
Ví dụKết quảGiải thích
SUBSTRING_INDEX('a.b.c', '.', 1)aPhần trước dấu chấm đầu
SUBSTRING_INDEX('a.b.c', '.', 2)a.bPhần trước dấu chấm thứ 2
SUBSTRING_INDEX('a.b.c', '.', -1)cPhần sau dấu chấm cuối
SUBSTRING_INDEX('a.b.c', '.', -2)b.cPhần sau dấu chấm倒 số 2

Lấy từ cuối cùng

SELECT SUBSTRING_INDEX(ten_cot, ' ', -1) AS tu_cuoi_cung FROM ten_bang;

Ứng dụng thực tế

Tách họ và tên (giả định: Họ là từ đầu, Tên là phần còn lại)

SELECT 
    full_name,
    SUBSTRING_INDEX(full_name, ' ', 1) AS ho,
    TRIM(SUBSTRING(full_name, LENGTH(SUBSTRING_INDEX(full_name, ' ', 1)) + 2)) AS ten
FROM users;

Lấy domain từ email (phương pháp khác)

SELECT SUBSTRING_INDEX(email, '@', -1) AS domain FROM users;

Lấy phần mở rộng file

SELECT SUBSTRING_INDEX(filename, '.', -1) AS extension FROM files;

Lưu ý

  • Delimiter là chuỗi, không phải regex
  • Nhiều khoảng trắng liên tiếp: Cần TRIM() hoặc REPLACE() trước
  • Chuỗi không có delimiter: Trả về toàn bộ chuỗi (count > 0) hoặc rỗng (count < 0)
  • Hiệu năng tốt, có thể dùng trong WHERE/ORDER BY