web-dev-qa-db-fra.com

Comment rechercher des champs contenant un texte donné dans MySQL?

SELECT stuff REGEXP 'iTunes' as is_iTunes;

Dans cette requête MySQL, si "stuff" contient le mot "iTunes", il le marquera comme iTunes.

Cependant, je veux dire "commencer par". Comment puis-je vérifier "commence par" au lieu de n'importe où dans le texte?

40
TIMEX
SELECT ... WHERE stuff LIKE 'iTunes%';

Ici % sert de caractère générique, ce qui correspondrait aux lignes avec le champ stuff égal à l'un des iTunes, itunesfoo, iTunes1, ...

Plus d'informations: SQL LIKE Operator at W3Schools .

83
Marc B

Ajoutez le symbole caret, il représente le début de la chaîne:

SELECT stuff REGEXP '^iTunes' as is_iTunes;

Toutefois, LIKE 'iTunes%' comme suggéré par Marc devrait être beaucoup plus rapide, surtout si vos index sont correctement configurés.

7
Kaivosukeltaja

Pour un champ indexé, il est préférable de faire:

select ... where stuff >='iTunes' AND stuff < 'itunet'

Cela ne crée pas une analyse complète de la table et n'utilise pas l'index.

5
O_Z
SELECT ... WHERE LEFT(stuff, 6) = 'iTunes';
3
Meelah
SELECT ... WHERE stuff REGEXP '[[:<:]]iTunes';
0
Elaine