Paul Dixon réponse a fonctionné à merveille pour moi. Pour ajouter à cela, voici quelques choses que j'ai observées pour les personnes souhaitant utiliser les REGEXP:
Pour Accomplir de multiples tels que les filtres avec des caractères génériques:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field LIKE '%1940 %';
Utiliser REGEXP Alternative:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |1940 ';
Les valeurs au sein de REGEXP guillemets et entre la | du (OU des) opérateur sont traités comme des caractères génériques. Généralement, les REGEXP exigera des expressions génériques tels que (.*)1740 (.*) pour travailler en tant que %de 1740 %.
Si vous avez besoin de plus de contrôle sur le placement du générique, l'utilisation de certains de ces variantes:
Pour Accomplir COMME avec contrôle de Générique de Placement:
SELECT * FROM fiberbox WHERE field LIKE '1740 %'
OR field LIKE '%1938 '
OR field LIKE '%1940 % test';
Utilisation:
SELECT * FROM fiberbox WHERE field REGEXP '^1740 |1938 $|1940 (.*) test';
Placer ^ en face de la valeur indique le début de la ligne.
Plaçant $ après la valeur indique la fin de la ligne.
Placé (.*) se comporte un peu comme le générique%.
L' . indique n'importe quel caractère, à l'exception des sauts de ligne. La mise en place .
à l'intérieur de () * (.*) ajoute un motif de répétition indiquant le nombre
de caractères jusqu'à la fin de la ligne.
Il y a des moyens plus efficaces pour affiner des rencontres spécifiques, mais qui nécessite le plus d'examen des Expressions Régulières. REMARQUE: tous les modèles regex semblent fonctionner à MySQL consolidés. Vous aurez besoin de tester vos habitudes et de voir ce qui fonctionne.
Enfin, Pour Accomplir de Multiples AIME et AIME PAS les filtres:
SELECT * FROM fiberbox WHERE field LIKE '%1740 %'
OR field LIKE '%1938 %'
OR field NOT LIKE '%1940 %'
OR field NOT LIKE 'test %'
OR field = '9999';
Utiliser REGEXP Alternative:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 |^9999$'
OR field NOT REGEXP '1940 |^test ';
OU Mixte Alternative:
SELECT * FROM fiberbox WHERE field REGEXP '1740 |1938 '
OR field NOT REGEXP '1940 |^test '
OR field NOT LIKE 'test %'
OR field = '9999';
Avis je me suis séparé de la PAS mis dans un autre OÙ le filtre. J'ai expérimenté avec l'aide de la négation des modèles, des schémas, et ainsi de suite. Toutefois, ces expressions ne semblent pas produire les résultats escomptés. Dans le premier exemple ci-dessus, j'utilise ^9999$ pour indiquer la correspondance exacte. Cela vous permet d'ajouter des rencontres spécifiques avec des caractères génériques matchs dans la même expression. Cependant, vous pouvez également mélanger ces types de déclarations comme vous pouvez le voir dans le deuxième exemple ci.
Concernant les performances, j'ai couru quelques petits tests à l'encontre d'une table existante et n'a trouvé aucune différence entre mon variations. Cependant, j'imagine que la performance pourrait être un problème avec les plus grandes bases de données, des champs plus vastes, plus le nombre d'enregistrements et de plus de filtres complexes.
Comme toujours, l'utilisation de la logique ci-dessus que c'est logique.
Si vous voulez en savoir plus sur les expressions régulières, je recommande www.regular-expressions.info un bon site de référence.