สตริง SQLite ประกอบด้วยแบบสอบถามสตริงอื่น ๆ


111

ฉันต้องทำอย่างไร

ตัวอย่างเช่นถ้าคอลัมน์ของฉันคือ "แมวสุนัขนก" และฉันต้องการรับแถวใด ๆ ที่คอลัมน์มีแมวอยู่


3
แก้ไขคำถามของคุณด้วยชุดข้อมูลตัวอย่าง เป็นการยากที่จะระบุว่าคุณต้องการอะไร
p.campbell

มีความสุขในการโหวตครั้งที่ 100
อธิการ

คำตอบ:


196

ใช้ LIKE:

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

4
%โปรดทราบว่านี้ไม่เหมาะที่สตริงที่คุณกำลังค้นหาเป็นตัวแปรหรือประกอบด้วยอักขระพิเศษเช่น
แซม

10
ถ้า "แมว" เป็นฟิลด์จากตารางอื่นคุณสามารถใช้'%'||table2.field||'%'เป็นเกณฑ์ที่คล้ายกันได้
Stéphane Ch.

96

แม้ว่าLIKEจะเหมาะสำหรับกรณีนี้ แต่ก็มีการใช้วิธีแก้ปัญหาสำหรับวัตถุประสงค์ทั่วไปมากกว่าinstrซึ่งไม่จำเป็นต้องใช้อักขระในสตริงการค้นหา หมายเหตุ: instrสามารถใช้ได้เริ่มต้นจาก Sqlite 3.7.15

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

นอกจากนี้ยังเก็บไว้ในใจว่าLIKEเป็น CASE- ตายในขณะที่instrเป็น CASE- มีความละเอียดอ่อน


13
ซึ่งหมายความว่า minSdkVersion ของคุณควรเป็น 21 (5.0-Lollipop)
Maksim Turaev

1
@WilliamEntriken ในการทดสอบของตัวเองinstr(...)เร็วขึ้นเล็กน้อย (0.32 วินาทีเทียบกับ 0.34 วินาที) คุณสามารถใช้.timer onใน SQLite เพื่อวัดเวลาดำเนินการ
Arnie97
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.