Trong SQLite, bạn có thể sử dụng LIKE
trong các truy vấn của bạn để thực hiện so sánh đối sánh mẫu.
Ví dụ:bạn có thể thêm nó vào WHERE
của mình để chỉ trả về các hàng phù hợp với một mẫu nhất định.
Tuy nhiên, thêm nó vào WHERE
mệnh đề không phải là cách duy nhất bạn có thể sử dụng LIKE
nhà điều hành. Bạn cũng có thể sử dụng nó để trả về giá trị boolean.
Ví dụ cơ bản
Đây là một ví dụ cơ bản sử dụng LIKE
toán tử trong WHERE
mệnh đề.
SELECT * FROM Artist
WHERE Name LIKE 'Black%';
Kết quả:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 169 Black Eyed Peas
Trong trường hợp này, tôi muốn trả lại tất cả các nghệ sĩ có tên bắt đầu bằng Black .
Dấu phần trăm là một ký tự đại diện khớp với không hoặc nhiều hơn bất kỳ ký tự nào (kể cả dấu cách).
Không có ký tự đại diện
Nếu tôi không sử dụng ký tự đại diện, tôi sẽ không nhận được bất kỳ kết quả nào.
Đây là một ví dụ về ý tôi muốn nói:
SELECT * FROM Artist
WHERE Name LIKE 'Black';
Kết quả:
(Cái đó cố ý để trống vì không có kết quả.)
Nhiều ký tự đại diện
Bạn có thể sử dụng nhiều hơn một ký tự đại diện nếu được yêu cầu. Trong ví dụ này, tôi thêm một cái khác vào phía trước mẫu của tôi.
SELECT * FROM Artist
WHERE Name LIKE '%Black%';
Kết quả:
ArtistId Name ---------- ------------------- 11 Black Label Society 12 Black Sabbath 38 Banda Black Rio 137 The Black Crowes 169 Black Eyed Peas
Điều này dẫn đến nhiều hàng hơn được trả về, vì có hai hàng có Màu đen trong tên của họ, nhưng không phải ở đầu.
Dấu gạch dưới (_) Ký tự đại diện
Bạn cũng có tùy chọn sử dụng dấu gạch dưới (_
) ký tự đại diện.
Ký tự đại diện này khớp chính xác với một ký tự (bất kỳ ký tự nào).
Hãy xem xét bảng sau có tên là Cats :
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Có, một số con mèo trong số đó có những cái tên kỳ lạ, nhưng chúng sẽ rất hữu ích.
Dưới đây là một ví dụ về việc sử dụng ký tự đại diện gạch dưới trong một truy vấn đối với bảng đó.
SELECT * FROM Cats
WHERE CatName LIKE 'Br_sh';
Kết quả:
CatId CatName ---------- ---------- 1 Brush 2 Brash
Lưu ý rằng con mèo có tên là Broosh không được bao gồm.
Để bao gồm Broosh , Tôi sẽ cần sử dụng hai dấu gạch dưới:
SELECT * FROM Cats
WHERE CatName LIKE 'Br__sh';
Kết quả:
CatId CatName ---------- ---------- 3 Broosh
Tuy nhiên, điều này không bao gồm hai con mèo còn lại.
Tôi luôn có thể sử dụng dấu phần trăm để bao gồm các con mèo khác.
SELECT * FROM Cats
WHERE CatName LIKE 'Br%sh';
Kết quả:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh
Mặc dù vậy, hãy nhớ rằng điều này cũng sẽ trả về các tên có nhiều hơn hai ký tự giữa Br và sh .
Điều khoản ESCAPE
Đôi khi dữ liệu của bạn thực sự có thể bao gồm các ký tự đại diện. Nói cách khác, dữ liệu chứa dấu gạch dưới hoặc dấu phần trăm.
Đây có thể là một vấn đề nếu bạn thực sự đang cố gắng đối sánh dấu gạch dưới hoặc dấu phần trăm dưới dạng ký tự chữ chứ không phải dưới dạng ký tự đại diện.
Trong bảng mèo của tôi, bạn sẽ nhận thấy rằng một con mèo có ký hiệu phần trăm trong tên của nó. Một con mèo khác có tên gần như giống hệt nhau, ngoại trừ việc, thay vì ký hiệu phần trăm, nó là ký hiệu đô la.
Đây là bảng một lần nữa:
CatId CatName ---------- ---------- 1 Brush 2 Brash 3 Broosh 4 100%Fluff 5 100$Fluff
Nếu tôi chỉ muốn trả lại những con mèo có tên bắt đầu bằng 100% F thì tôi cần thoát khỏi % . Nếu tôi không thoát khỏi điều này, thì tôi sẽ nhận được những kết quả không mong muốn.
Đây là những gì sẽ xảy ra nếu tôi chạy một truy vấn không có thoát khỏi dấu phần trăm.
SELECT * FROM Cats
WHERE CatName LIKE '100%F';
Kết quả:
CatId CatName ---------- ---------- 4 100%Fluff 5 100$Fluff
Trong trường hợp này, dấu phần trăm cũng khớp với dấu đô la, vì dấu phần trăm được coi là một ký tự đại diện.
Để đảm bảo rằng dấu phần trăm không được coi là ký tự đại diện, chúng tôi có thể sử dụng ESCAPE
mệnh đề.
SELECT * FROM Cats
WHERE CatName LIKE '100\%%F' ESCAPE '\';
Kết quả:
CatId CatName ---------- ---------- 4 100%Fluff
Trả về giá trị Boolean
Bạn có thể sử dụng LIKE
toán tử để trả về 0 hoặc 1 , tùy thuộc vào việc có trùng khớp hay không.
Đây là một ví dụ.
SELECT
CatName,
CatName LIKE 'Br%'
FROM Cats;
Kết quả:
CatName CatName LIKE 'Br%' ---------- ------------------ Brush 1 Brash 1 Broosh 1 100%Fluff 0 100$Fluff 0
Trong trường hợp này, ba hàng đầu tiên phù hợp với tiêu chí và hai hàng cuối cùng thì không.
Phân biệt chữ hoa chữ thường
Theo mặc định, SQLite LIKE
toán tử 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 đặt Toán tử LIKE của SQLite phân biệt chữ hoa chữ thường để biết các ví dụ.
Hàm Like ()
Một cách khác để làm điều đó là sử dụng like()
hàm số.
Hàm này hoạt động giống hệt như LIKE
ngoại trừ việc bạn cần sử dụng một cú pháp hơi khác.
Tất cả các ví dụ trên có thể được viết lại để sử dụng like()
chức năng nếu được yêu cầu.