Giới thiệu
Hàm INSTR(str, substr) trả về vị trí (1-based) của lần xuất hiện đầu tiên của substr trong str. Nếu không tìm thấy trả về 0. Dùng trong ORDER BY để ưu tiên hàng có từ khóa xuất hiện sớm hơn.
Ví dụ thực hành
1. Tạo bảng DemoTable822
mysql> CREATE TABLE DemoTable822 (Word TEXT);
2. Chèn dữ liệu
mysql> INSERT INTO DemoTable822 VALUES ('Forever'),('ever'),('every'),('everyday');
3. Tìm từ chứa 'ever' và sắp xếp theo vị trí 'ever'
mysql> SELECT * FROM DemoTable822
WHERE Word LIKE '%ever%'
ORDER BY INSTR(Word, 'ever'), Word;
4. Kết quả
+----------+
| Word |
+----------+
| ever | -- vị trí 1
| every | -- vị trí 1
| everyday | -- vị trí 1
| Forever | -- vị trí 4
+----------+
Giải thích
INSTR('ever', 'ever')= 1.INSTR('Forever', 'ever')= 4.- Sắp xếp thứ cấp
, Wordđể ổn định thứ tự cho cùng vị trí.
Cách hiện đại (MySQL 8.0+): Window Function
SELECT Word, INSTR(Word, 'ever') AS pos
FROM DemoTable822
WHERE Word LIKE '%ever%'
ORDER BY pos, Word;
Lưu ý
INSTRphân biệt chữ hoa/thường theo collation. DùngLOWER()nếu cần không phân biệt:INSTR(LOWER(Word), 'ever').- Không dùng index → full scan. Dữ liệu lớn → Full-Text Search hoặc search engine.
LOCATE(substr, str)tương tựINSTRnhưng đổi thứ tự đối số.