2009-07-09 7 views
19

Używanie sqlite3, jeśli moje zapytanie jestSqlite wiązanie wewnątrz łańcucha dosłownym

SELECT * FROM table WHERE title LIKE '%x%'

To będzie pasować ciągi zawierające x. Chcę, aby x się Bindable parametr, jak:

SELECT * FROM table WHERE title LIKE '%x?%'

Jednak to nie działa, ponieważ postaci '' string dosłowne. Czy istnieje jakiś sposób na ucieczkę z ? w obrębie literału? Rozumiem, że mogę zbudować Bindable parametr, aby zawierał % a następnie użyć

SELECT * FROM table WHERE title LIKE ?

ale ten przenosi odpowiedzialność do mojego kodu pod względem obsługi zastrzyki SQL zamiast interfejsu wiązania. Czy istnieje lepsze rozwiązanie?

Odpowiedz

34
SELECT * FROM table WHERE title LIKE '%' || ? || '%'; 
+5

To nie tylko sqlite; '||' jest w standardzie SQL; Postgres i Oracle podążają za tym. MySQL i MSSQL używają odpowiednio 'CONCAT()' i '+', oba są niestandardowe. – ephemient