SQLite like()
hàm cho phép bạn so sánh một chuỗi với một mẫu nhất định. Bạn cũng có thể chỉ định một ký tự thoát nếu được yêu cầu.
Bạn có thể sử dụng like()
hoạt động như một sự thay thế cho LIKE
toán tử (cho phép bạn chạy Y LIKE X [ESCAPE Z]
biểu thức).
Cú pháp
Bạn có thể sử dụng một trong các cách sau:
like(X,Y)
like(X,Y,Z)
-
X
là khuôn mẫu -
Y
là chuỗi -
Z
là một ký tự thoát tùy chọn
Ví dụ cơ bản
Lấy bảng sau:
CatId CatName ---------- ---------- 1 Brush 2 Flutter 3 100%Fluff 4 100$Fluff
Chúng tôi có thể chạy mã sau để trả về tất cả các hàng có tên con mèo bắt đầu bằng chữ F:
SELECT * FROM Cats
WHERE like('F%', CatName);
Kết quả:
CatId CatName ---------- ---------- 3 Flutter
Trong ví dụ này, tôi đã sử dụng %
ký tự đại diện để biểu thị bất kỳ số ký tự nào có thể theo sau (bao gồm cả ký tự không) và chúng có thể là bất kỳ ký tự nào.
Ký tự gạch dưới (_)
Dưới đây là một ví dụ sử dụng dấu gạch dưới (_
) tính cách. Ký tự đại diện này khớp chính xác với một ký tự - không hơn, không kém.
SELECT * FROM Cats
WHERE like('Br_sh', CatName);
Kết quả:
CatId CatName ---------- ---------- 1 Brush
Như đã đề cập, nó chỉ khớp với một ký tự duy nhất. Vì vậy, dựa trên dữ liệu của tôi, tôi không thể thực hiện những điều sau và mong đợi bất kỳ kết quả phù hợp nào.
SELECT * FROM Cats
WHERE like('Br_', CatName);
Kết quả:
(Phần này cố ý để trống do không có kết quả).
Nhân vật đang chạy trốn
Bạn cũng có thể thoát các ký tự nếu được yêu cầu. Để thực hiện việc này, hãy thêm ký tự thoát làm tham số thứ ba (và cũng thêm ký tự này trước ký tự mà bạn muốn thoát).
SELECT * FROM Cats
WHERE like('100\%F%', CatName, '\');
Kết quả:
CatId CatName ---------- ---------- 3 100%Fluff
Trong trường hợp này, tôi đã thoát khỏi dấu phần trăm (%
). Tôi đã làm điều này bởi vì tôi đang tìm kiếm những con mèo có ký hiệu tỷ lệ phần trăm thực tế trong tên của chúng. Trên thực tế, trong trường hợp này, tôi đang tìm kiếm một tên mèo rất cụ thể - tên bắt đầu bằng 100% F .
Nếu tôi không thoát khỏi điều đó, nó sẽ được sử dụng làm ký tự đại diện và kết quả sẽ khác.
Đây là những gì tôi nhận được khi xóa ký tự thoát.
SELECT * FROM Cats
WHERE like('100%F%', CatName);
Kết quả:
CatId CatName ---------- ---------- 3 100%Fluff 4 100$Fluff
Trả về giá trị Boolean
Bạn có thể sử dụng like()
hàm trả về 0 hoặc 1 , tùy thuộc vào việc có trùng khớp hay không.
Điều này có thể hữu ích nếu bạn cần trả lại tất cả các hàng, nhưng cũng có cờ cho biết liệu chúng có phù hợp với tiêu chí của bạn hay không.
Đây là một ví dụ.
SELECT
CatName,
like('F%', CatName)
FROM Cats;
Kết quả:
CatName CatName LIKE 'F%' ---------- ------------------ Brush 0 Flutter 1 100%Fluff 0 100$Fluff 0
Trong trường hợp này, chỉ một hàng phù hợp với tiêu chí, nhưng chúng tôi vẫn phải xem tất cả các hàng khác.
Phân biệt chữ hoa chữ thường
Theo mặc định, SQLite like()
hàm không phân biệt chữ hoa chữ thường đối với các ký tự ASCII. Điều này có nghĩa là nó sẽ khớp với các ký tự viết hoa và viết thường, bất kể bạn sử dụng kiểu chữ nào trong mẫu của mình.
Bạn có thể sử dụng case_sensitive_like Câu lệnh PRAGMA để thực hiện đối sánh phân biệt chữ hoa chữ thường trong phạm vi ASCII.
Xem Cách phân biệt chữ hoa chữ thường với toán tử LIKE của SQLite để biết ví dụ. Bài báo đó được viết cho LIKE
nhưng nó cũng áp dụng cho like()
chức năng.