Sử dụng kết hợp LEFT() và LOCATE() để cắt chuỗi từ đầu đến trước khoảng trắng đầu tiên.
Cú pháp
SELECT LEFT(column_name, LOCATE(' ', column_name) - 1) AS first_part
FROM table_name;
Giải thích:
LOCATE(' ', column_name)trả về vị trí khoảng trắng đầu tiên (bắt đầu từ 1).- Trừ 1 để lấy vị trí ký tự cuối cùng trước khoảng trắng.
LEFT(str, len)lấylenký tự từ bên trái.
Ví dụ minh họa
mysql> CREATE TABLE AllCharacterBeforeSpace (
FirstNameAndLastName VARCHAR(200)
);
Query OK, 0 rows affected (0.51 sec)
mysql> INSERT INTO AllCharacterBeforeSpace VALUES
('John Smith'), ('Carol Taylor'), ('Maria Garcia'), ('James Johnson');
Query OK, 4 rows affected
Truy vấn:
mysql> SELECT LEFT(FirstNameAndLastName, LOCATE(' ', FirstNameAndLastName) - 1)
AS FirstNameBeforeSpace
FROM AllCharacterBeforeSpace;
Kết quả:
+----------------------+ | FirstNameBeforeSpace | +----------------------+ | John | | Carol | | Maria | | James | +----------------------+
Xử lý trường hợp không có khoảng trắng
Nếu chuỗi không chứa khoảng trắng, LOCATE trả về 0, LEFT(str, -1) trả về chuỗi rỗng.
-- Cải tiến: dùng CASE WHEN
SELECT CASE
WHEN LOCATE(' ', col) > 0 THEN LEFT(col, LOCATE(' ', col) - 1)
ELSE col
END AS first_part FROM table_name;
Cách thay thế: SUBSTRING_INDEX()
SELECT SUBSTRING_INDEX(column_name, ' ', 1) AS first_part FROM table_name;
SUBSTRING_INDEX(str, delim, 1) lấy phần trước dấu phân cách đầu tiên. Xử lý NULL an toàn hơn.