Một ô lọc ghi chú nhận cụm 20%. Người dùng có thể muốn tìm đúng ba ký tự đó, trong khi dấu phần trăm có ý nghĩa riêng trong mẫu LIKE. Để tránh phải giải thích quy tắc mẫu cho ô tìm kiếm đơn giản, hãy chốt trước rằng đầu vào đại diện cho một chuỗi nguyên văn.
Ví dụ và cách đọc
SQLite instr nhận văn bản và đoạn cần tìm. Kết quả dương biểu thị vị trí của lần khớp đầu tiên, tính từ 1. Không có đoạn khớp thì kết quả là 0. Nếu một đối số NULL, kết quả là NULL. Fixture dùng chuỗi TEXT và một dòng thiếu nội dung để bạn thấy đủ ba trường hợp.
WITH notes(id, body) AS (
VALUES (1, 'giảm 20% hôm nay'), (2, 'giảm 20 điểm'), (3, NULL)
)
SELECT id, instr(body, '20%') AS position
FROM notes
ORDER BY id;
Kiểm tra kết quả
Kết quả theo ID là 6, 0 và NULL. Khi chỉ cần lọc dòng có đoạn khớp, dùng điều kiện instr(body, ?) > 0 với tham số do driver gắn vào. Trong SELECT minh họa, giữ cột position để phân biệt dữ liệu thiếu với dữ liệu đã có nhưng không chứa cụm tìm. Giá trị SQL NULL bị loại khỏi kết quả khi áp dụng điều kiện lớn hơn 0.
Áp dụng và giới hạn
Thử thêm ô tìm rỗng và quyết định ngay ở giao diện xem nên hiện mọi dòng hay chờ người dùng nhập. Nếu sản phẩm muốn tìm không phân biệt hoa thường hoặc dấu tiếng Việt, hãy xác định chính sách chuẩn hóa riêng và thêm fixture. Ví dụ chỉ chạy SELECT trong SQLite 3.54.0, không đo index, không chạy ORM và không đánh giá tìm kiếm toàn văn. Đừng chọn truy vấn cho bảng lớn chỉ dựa vào ba hàng minh họa.
Tình huống áp dụng
Thử tiếp một ghi chú chứa hai lần cụm tìm, chẳng hạn “20% hôm nay, 20% ngày mai”. Giá trị trả về là vị trí đầu tiên; nó không phải số lần xuất hiện. Nếu frontend cần tô sáng mọi lần khớp, hãy viết logic đó riêng và xác định đơn vị vị trí mà môi trường hiển thị sử dụng. Đặc biệt, vị trí ký tự của SQLite không nên được chuyển thẳng thành offset UTF-16 của JavaScript trong mọi trường hợp.
Khi viết test tích hợp, truyền cụm tìm qua tham số của driver, rồi kiểm tra ID trả về chứ không chỉ số lượng dòng. Thêm một mẫu có ký tự gạch dưới và một mẫu chỉ có phần tiền tố để kiểm tra đường đi của ô lọc. Nếu ứng dụng còn có chức năng tìm theo mẫu, đặt tên hai chế độ sao cho người dùng biết ký tự đặc biệt được hiểu thế nào. Với văn bản thiếu, thống nhất trước có đưa dòng đó vào chế độ hiện toàn bộ hay không.


