J'essaie d'exécuter la requête SQL:
select * from table where column like '%value%';
Mais les données sont enregistrées en tant que "Valeur" (V est capital).
Lorsque j'exécute cette requête, je ne reçois aucune ligne. Comment faire l'appel de telle sorte qu'il recherche la «valeur» quel que soit le style des caractères?
utilisez LOWER Function dans les deux (colonne et mot (s) de recherche). En le faisant, vous vous assurez que même si dans la requête est quelque chose comme% VaLuE%, cela n'aura pas d'importance
select qt.*
from query_table qt
where LOWER(column_name) LIKE LOWER('%vAlUe%');
Si vous voulez que cette colonne soit insensible à la casse:
ALTER TABLE `schema`.`table`
CHANGE COLUMN `column` `column` TEXT CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';
Ainsi, vous n'avez pas à changer votre requête.
Et le moteur MySQL traitera votre requête plus rapidement que d’utiliser la fonction lower () ou d’autres astuces.
Et je ne suis pas sûr que l’utilisation de la fonction low constitue une bonne solution pour les performances de recherche d’index .
Utilisez un classement insensible à la casse sur votre table ou bien forcez les valeurs à être en minuscule, par exemple.
WHERE lower(column) LIKE lower('%value%');
Utilisez la fonction lower()
:
select t.*
from table t
where lower(column) like '%value%';
Essayez d'utiliser un classement insensible à la casse.
select * from table
where column like '%value%' collate utf8_general_ci
Si vous utilisez PostgreSQL, une solution plus simple consiste à utiliser insensible comme (ILIKE) :
SELECT * FROM table WHERE column ILIKE '%value%'
vous devez utiliser la fonction lower ou upper pour ignorer la casse pendant que vous recherchez un champ utilisant like.
select * from student where upper(sname) like 'S%';
OU
select * from student where lower(sname) like 'S%';