สตริง 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.