Sử dụng SUBSTRING_INDEX(str, delim, count) với count = -1 để lấy phần sau dấu phân cách cuối cùng.
Cú pháp
SELECT SUBSTRING_INDEX(column_name, ' ', -1) AS last_word FROM table_name;
Giải thích:
count > 0: lấy phần trước dấu phân cách thứcount(từ trái).count < 0: lấy phần sau dấu phân cách thứ|count|(từ phải).-1= sau dấu phân cách cuối cùng.
Ví dụ minh họa
mysql> CREATE TABLE FirstWordDemo (AllWords LONGTEXT);
Query OK, 0 rows affected (0.83 sec)
mysql> INSERT INTO FirstWordDemo VALUES
('This is the first MySQL Query'),
('MySQL is a Relational Database'),
('FirstWord is not correct');
Query OK, 3 rows affected
Truy vấn từ cuối:
mysql> SELECT SUBSTRING_INDEX(AllWords, ' ', -1) AS MyFirstWordResult FROM FirstWordDemo;
Kết quả:
+-------------------+ | MyFirstWordResult | +-------------------+ | Query | | Database | | correct | +-------------------+
Các biến thể hữu ích
| Mục đích | Cú pháp | Ví dụ kết quả |
|---|---|---|
| Từ đầu tiên | SUBSTRING_INDEX(col, ' ', 1) |
'This' |
| Từ cuối cùng | SUBSTRING_INDEX(col, ' ', -1) |
'Query' |
| 2 từ cuối | SUBSTRING_INDEX(col, ' ', -2) |
'MySQL Query' |
| Bỏ từ đầu | SUBSTRING_INDEX(col, ' ', -1 * (LENGTH(col)-LENGTH(REPLACE(col,' ','')))) |
Phức tạp, dùng app layer |
Lưu ý
- Nếu chuỗi không chứa dấu phân cách, trả về toàn bộ chuỗi.
- Dấu phân cách có thể là chuỗi (không chỉ 1 ký tự):
SUBSTRING_INDEX(url, '/', -1)lấy segment cuối URL. - Xử lý NULL:
SUBSTRING_INDEX(NULL, ...)trả về NULL.