2010-09-08 3 views

Répondre

33

Yepper, utilisez Like. Select id from sometable where name like '%omm%' retournerait n'importe quelle ligne qui avait «omm» n'importe où dans la colonne de nom.

+0

et si la chaîne contenait réellement le caractère "%". Que fait SQLite dans ce cas? –

+4

Il existe un mot-clé ESCAPE qui vous permet de définir un caractère d'échappement afin que vous puissiez interroger sur% ou _. Voir: http://www.sqlite.org/lang_expr.html Donc, vous feriez quelque chose comme "select id from mytable où le nom comme '% somename \ %%' escape '\' – GrandmasterB

+1

avertissement: ceci est insensible à la casse – Bren

12

Vous pouvez utiliser LIKE, mais il obtient vraiment lent si le modèle que vous recherchez commence par '%' - à savoir, si la sous-chaîne que vous cherchez est pas nécessairement au début de la champ.

Si vous devez effectuer de telles recherches, pensez à utiliser FTS3, ce qui rend la recherche en texte intégral considérablement plus efficace.

+0

Intéressant, y at-il beaucoup de frais généraux à utiliser FTS3? Peut-il être utilisé avec l'API SQLite dans C? –

+0

@Tommy: Je ne suis pas sûr de ce que l'overhead qualifierait beaucoup de votre point de vue Oui, il peut être utilisé à partir de l'API C. –

+1

L'extension FTS est incluse dans la distribution SQLite. Vous avez juste besoin de lire les documents et de l'allumer au moment de la construction. Notez qu'il va construire un index de taille non négligeable avec lequel il fonctionne sa magie ... – RBerteig