47 votes

Comment rechercher une sous-chaîne dans SQLite ?

Quel est le moyen le plus efficace de rechercher une sous-chaîne dans SQLite ?

Je regarde l'opérateur LIKE.

Est-ce que j'ai la bonne idée ? Est-ce que cela a bien fonctionné pour vous ?

http://www.sqlite.org/lang_expr.html

Merci.

65voto

GrandmasterB Points 2426

Oui, utilisez Like . Une requête telle que :

Select id from sometable where name like '%abc%'

renverrait toute ligne contenant "abc" dans la colonne des noms.

Si le motif que vous recherchez contient le caractère % ou _, vous pouvez utiliser le mot-clé ESCAPE pour définir un caractère d'échappement afin d'inclure ce caractère spécial dans l'expression. Pour rechercher la chaîne "nom_de_somme%" (y compris le %), l'expression ressemblerait à ceci :

select id from mytable where name like '%somename\%%' escape '\' 

Voir : Expressions du langage SQLite

15voto

Jerry Coffin Points 237758

Vous puede utiliser LIKE mais il devient vraiment lent si le motif que vous recherchez commence par '%' -- c'est-à-dire si la sous-chaîne que vous recherchez ne se trouve pas nécessairement au début du champ.

Si vous avez besoin d'effectuer de telles recherches, envisagez d'utiliser l'outil FTS3 ce qui rend la recherche en texte intégral beaucoup plus efficace.

11voto

Alexei Martianov Points 405

Des années ont passé depuis que la question a été posée et répondue et en 2012, la version 3.7.15 de SQLite a introduit une fonction instr( string, substring) - renvoie l'emplacement d'une sous-chaîne dans une chaîne de caractères, 0 si non trouvé. ( https://www.techonthenet.com/sqlite/functions/instr.php )

sqlite> SELECT instr('TechOnTheNet.com', 'T') ;
Résultat : 1

Je n'ai pas fait de comparaison avec LIKE mais, à mon avis, il pourrait être plus rapide.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X