SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

Cách hoạt động của toán tử LIKE trong SQLite

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 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có thực sự cần thiết để tạo bảng SQLite mỗi khi ứng dụng khởi động?

  2. Cách tạo một số ngẫu nhiên trong một phạm vi được chỉ định trong SQLite

  3. SQLite VACUUM

  4. Chi phí sử dụng AUTOINCREMENT cho SQLite trên Android là gì?

  5. Không thể chèn bản ghi vào Cơ sở dữ liệu SQLite từ Dịch vụ Thông báo Firebase khi ứng dụng ở trạng thái nền hoặc trạng thái đóng