111 votes

Requête SQL comme une chaîne de recherche qui commence par

Apprentissage de SQL. J'ai une table de jeux simple avec le champ titre. Je veux rechercher en fonction du titre. Si j'ai un jeu appelé Age of Empires III: Dynasties, et j'utilise LIKE avec le paramètre Age of Empires III: Dynasties, tout fonctionne bien, la recherche renvoie l'enregistrement avec ce nom. Mais si je recherche avec Age of Empires III, aucun enregistrement n'est renvoyé :

SELECT * from games WHERE (lower(title) LIKE 'age of empires III');

Cela ne renvoie rien. Devrais-je utiliser autre chose à la place de LIKE ?

J'utilise MySQL.

3voto

alnajm Points 126

Si vous avez utilisé l'opérateur "like" sans %, le like fonctionne comme l'égal (=), cela signifie que votre code sera comme ceci :

select * from games where lower(title) = 'age of empires iii';

Donc, s'il ne trouve aucune donnée correspondante, rien ne sera retourné.

Mais si vous voulez comparer seulement une partie du titre avec votre paramètre, vous devriez utiliser le signe %. Vous pouvez l'utiliser à différentes positions et cela dépend de la logique de la base de données.

Généralement, il est utilisé au début et à la fin du paramètre, et le code sera comme ceci :

select * from games where lower(title) like '%age of empires iii%';

Cela recherchera la valeur dans la colonne du titre même s'il y a des caractères qui ne correspondent pas au début ou à la fin, ou les deux. La condition importante est qu'elle recherchera si la valeur envoyée en tant qu'argument à l'opérateur like (dans ce cas la valeur est "age of empires iii") est trouvée quelque part dans le champ du titre (dans ce cas le titre est "Age of Empires III: Dynasties"), et cette condition est vérifiée, donc cette ligne et toutes les autres lignes avec le même cas seront retournées.

0voto

Kaan Ateşel Points 168

En SQL %---% correspond à n'importe quel caractère entre. select * from table_name where column_name like '%kk%'; correspondra à n'importe quelle chaîne qui inclut 'ss' par exemple:

  • llssll
  • ssll

Si vous voulez correspondre au début de la chaîne, vous devriez utiliser 'ss%' à la place. select * from table_name where column_name like 'ss%'; cette requête ne retournera que ssll.

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