Hàm LEFT(str, n) trong MySQL trả về n ký tự đầu tiên của chuỗi str. Kết hợp với mệnh đề WHERE cho phép lọc các hàng có giá trị cột bắt đầu bằng ký tự (hoặc chuỗi) cụ thể.
Ví dụ minh họa
Tạo bảng nhân viên:
mysql> CREATE TABLE DemoTable1428 (
EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmployeeName VARCHAR(20)
);
Chèn dữ liệu:
mysql> INSERT INTO DemoTable1428 (EmployeeName) VALUES ('Chris Brown');
mysql> INSERT INTO DemoTable1428 (EmployeeName) VALUES ('Bob Brown');
mysql> INSERT INTO DemoTable1428 (EmployeeName) VALUES ('John Smith');
mysql> INSERT INTO DemoTable1428 (EmployeeName) VALUES ('David Miller');
mysql> INSERT INTO DemoTable1428 (EmployeeName) VALUES ('John Doe');
mysql> INSERT INTO DemoTable1428 (EmployeeName) VALUES ('Carol Johnson');
Dữ liệu:
mysql> SELECT * FROM DemoTable1428;
+------------+---------------+ | EmployeeId | EmployeeName | +------------+---------------+ | 1 | Chris Brown | | 2 | Bob Brown | | 3 | John Smith | | 4 | David Miller | | 5 | John Doe | | 6 | Carol Johnson | +------------+---------------+
Lọc tên bắt đầu bằng chữ 'J'
mysql> SELECT * FROM DemoTable1428
WHERE LEFT(EmployeeName, 1) = 'J';
Kết quả:
+------------+--------------+ | EmployeeId | EmployeeName | +------------+--------------+ | 3 | John Smith | | 5 | John Doe | +------------+--------------+
Các cách lọc tiền tố khác
| Cú pháp | Mô tả | Hiệu năng |
|---|---|---|
LEFT(col, 1) = 'J' | Hàm LEFT, dễ hiểu | Không dùng index |
SUBSTRING(col, 1, 1) = 'J' | Hàm SUBSTRING | Không dùng index |
col LIKE 'J%' | Toán tử LIKE (chuẩn SQL) | Có thể dùng index |
col RLIKE '^J' | Regular expression | Không dùng index |
Khuyên dùng: WHERE col LIKE 'J%' — cú pháp chuẩn, tối ưu nhất, có thể tận dụng index trên cột.
Mở rộng: Lọc theo nhiều ký tự đầu
-- Tên bắt đầu bằng J, C, hoặc D
WHERE LEFT(EmployeeName, 1) IN ('J', 'C', 'D')
-- Hoặc dùng LIKE với OR
WHERE EmployeeName LIKE 'J%' OR EmployeeName LIKE 'C%' OR EmployeeName LIKE 'D%'