Chuỗi SQLite chứa truy vấn chuỗi khác


111

Làm thế nào để tôi làm điều này?

Ví dụ: nếu cột của tôi là "mèo, chó, chim" và tôi muốn lấy bất kỳ hàng nào trong đó cột chứa mèo?


3
chỉnh sửa câu hỏi của bạn với một tập hợp dữ liệu mẫu. Thật khó để xác định chính xác những gì bạn đang yêu cầu.
p.campbell

Chúc mừng lượt bình chọn thứ 100.
giám mục

Câu trả lời:


195

Sử dụng LIKE:

SELECT *
  FROM TABLE
 WHERE column LIKE '%cats%'  --case-insensitive

4
Hãy nhớ rằng điều này không phù hợp khi chuỗi bạn đang tìm kiếm có thể thay đổi hoặc chứa một ký tự đặc biệt chẳng hạn như %.
Sam

10
nếu "mèo" là một trường từ một bảng khác, bạn có thể sử dụng '%'||table2.field||'%'làm tiêu chí tương tự
Stéphane Ch.

96

Mặc dù LIKEphù hợp với trường hợp này, nhưng giải pháp có mục đích chung hơn là sử dụng instr, giải pháp này không yêu cầu các ký tự trong chuỗi tìm kiếm phải được thoát. Lưu ý: instrcó sẵn bắt đầu từ Sqlite 3.7.15 .

SELECT *
  FROM TABLE  
 WHERE instr(column, 'cats') > 0;

Ngoài ra, hãy nhớ rằng LIKElà đựng pin- không nhạy cảm , trong khi đó instrlà đựng pin- nhạy cảm .


13
Những phương tiện đó minSdkVersion của bạn nên được 21 (5.0-Lollipop)
Maksim Turaev

1
@WilliamEntriken Trong thử nghiệm của riêng tôi, instr(...)nhanh hơn một chút (0,32 giây so với 0,34 giây). Bạn có thể sử dụng .timer ontrong SQLite để đo thời gian thực thi.
Arnie97
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.